PHP函数

简介: PHP语言中有关函数的知识点


本文是复习所写,并不会涵盖一些基础知识点

用户自定义函数

<?php

 

/**

* 示例函数

*

* @param mixed $arg1 参数一

* @param mixed $arg2 参数二

* @param mixed $argN 参数N

* @return mixed

*/

functionfoo($arg1, $arg2, $argN)

{

   return'called!';

}

  • PHP中函数是全局的,只要定义了就可以在任何地方调用
  • 函数内部可以写任何有效的PHP代码,就算定义函数和类也是可以的
  • PHP不支持函数重载,也不能取消定义和重写义已声明函数
  • 递归调用时,要避免超过100~200层

函数参数

  • 引用传参

<?php

functionfoo(&$arg)

{

   $arg=1;

}

  • 在参数前面加上&可以将值传递变为引用传递,在函数内对变量做的操作会改变函数外的变量
  • 参数默认值

<?php

functionfoo($arg='demo')

{

   var_dump($arg);

}

  • 默认值必须是常量表达式,不能是变量、类成员、函数调用等
  • 可变数量参数

<?php

functionfoo($arg, ...$args)

{

   var_dump($arg);

   var_dump($args);

}

foo(1,2,3,4,5);

foo([1,2,3]);

  • 在参数前加...来标识这个参数是可变参数
    可变参数只能是参数列表中最后一个
    也可以通过func_num_args()func_get_arg()func_get_args()函数来获取可变参数
  • 命名参数 PHP 8
    有了命名参数后在调用函数时就可以忽略参数顺序,配合参数默认值使用的话就可以在使用函数时只传需要的参数而不必要将无意义的值也传上
    命名参数通过在参数名前加上冒号来传递,可以使用保留关键字,但不能使用变量

<?php

 

functionfoo(first_num: $a, last_num: $b)

{

   return$a+$b;

}

 

 

返回值

使用return可以返回任何类型数据,return会立即终止函数的执行,并将执行权交还给调用者

可以使用list解包数组类型的返回值

<?php

functionfoo()

{

   return ['one', 'two'];

}

list($a, $b) =foo();

函数返回引用类型值时,函数声明和函数调用前都必须加&

<?php

function&foo()

{

   $a=1;

   return$a;

}

$b=&foo();

可变函数

如果变量名后有(),PHP将寻找与变量的值同名的函数,并尝试执行

<?php

 

$funName='foo';

 

// 函数

functionfoo($a)

{

   var_dump($a);

}

$funName('demo');

 

// 类方法

classTest()

{

   static$foo='attribute';

   

   publicfunctionfoo($a)

   {

       var_dump($a);

   }

   

   publicstaticfunctiontwo($a)

   {

       var_dump($a);

   }

   

}

(newTest())->$funName('test'); // 方式一

 

$fun= ['Test', 'foo']; // 方式二

$fun();

 

$fun= [newTest, 'foo']; // 方式三

$fun();

 

$fun='Test::two'; // 类静态方法

$fun();

内部函数

PHP有很多内置函数,有些函数是需要和特定的扩展一起编译

function_exists()判断函数是否存在

get_extension_funcs()获取某个模块的函数列表

dl()加载模块

匿名函数

匿名函数是通过Closure类来实现

匿名函数可以用use来从父类继承变量,也可以定义参数

<?php

$a = 1;

$fun = functon ($b) use ($a) {

   echo $a + $b;

};

在类中使用时,会在匿名函数内部自动绑定$this

<?php


class Test()

{

   public $attr = 1;

   

   public function foo()

   {

       return function (){

           var_dump($this);

       }

   }

   

   // 当不需要自动绑定时,可以将匿名函数静态化

   public function two()

   {

       return static function() {

           var_dump($this);

       }

   }

}

箭头函数PHP 7.4

箭头函数跟匿名函数一样,都是通过Closure实现,只是比匿名函数更简洁,也只能实现比较简单的功能

箭头函数会自动捕获父作用域变量进行值拷贝

<?php

$x = 1;

$fn = fn($a, $b) => $a + $b + $x;

var_dump($fn(1, 2));


// 箭头函数可以嵌套

$fn = fu($a) => fu($b) => $a + $b;

var_dump($fn(1)(2));

First class callable syntaxPHP 8.1

这是一中引用闭包的新方法

<?php

// PHP8.1之前

// 使用Closure将函数转成闭包形式

$closure = Closure::fromCallable('strlen');

var_dump($closure('sssss'));


// PHP8.1

$closure = strlen(...);

var_dump($closure('demo'));


目录
相关文章
|
9月前
|
Shell PHP Windows
PHP代码审计(四)PHP文件操作函数(2)
改变文件所有者。如果成功则返回 TRUE,如果失败则返回 FALSE。 语法:chown(file,owner)
64 0
|
9月前
|
安全 Unix Shell
PHP代码审计(四)PHP文件操作函数(1)
改变文件所有者。如果成功则返回 TRUE,如果失败则返回 FALSE。 语法:chown(file,owner)
63 0
|
24天前
|
Linux PHP
Linux CentOS 宝塔 Suhosin禁用php5.6版本eval函数详细图文教程
【8月更文挑战第27天】本文介绍两种禁用PHP执行的方法:使用`PHP_diseval_extension`禁用和通过`suhosin`禁用。由于`suhosin`不支持PHP8,仅适用于PHP7及以下版本,若服务器安装了PHP5.6,则需对应安装`suhosin-0.9.38`版本。文章提供了详细的安装步骤,并强调了宝塔环境下与普通环境下的PHP路径差异。安装完成后,在`php.ini`中添加`suhosin.so`扩展并设置`executor.disable_eval = on`以禁用执行功能。最后通过测试代码验证是否成功禁用,并重启`php-fpm`服务生效。
18 2
|
1月前
|
JavaScript 前端开发 PHP
|
1月前
|
监控 数据库连接 PHP
php中register_shutdown_function函数用法详解
通过 `register_shutdown_function`,PHP开发者可以对脚本的终止进行更精细化的处理,这个函数让开发者能在脚本的生命周期结束时有机会执行最后的操作,无论脚本是正常结束还是发生错误。由于它的高度实用性和灵活性,`register_shutdown_function`是PHP开发中不可或缺的工具之一。
30 0
|
2月前
|
SQL 关系型数据库 MySQL
php所有函数总结
以上只是PHP中函数的一部分,实际上PHP提供了丰富的内置函数,能够处理各种复杂的任务。
19 2
|
2月前
|
存储 Serverless PHP
|
3月前
|
PHP
原生php制作分页函数
原生php制作分页函数
25 0
|
4月前
|
PHP Perl
PHP-ereg()函数
但再次强调,不建议使用ereg()函数,而应该改用preg_match()函数来执行更灵活和强大的正则表达式匹配操作。
46 4
|
4月前
|
运维 JavaScript Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,Php环境,配置取消禁止函数exec如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
334 4