本文是复习所写,并不会涵盖一些基础知识点
用户自定义函数
<?php
/**
* 示例函数
*
* @param mixed $arg1 参数一
* @param mixed $arg2 参数二
* @param mixed $argN 参数N
* @return mixed
*/
function foo($arg1, $arg2, $argN)
{
return 'called!';
}
函数参数
<?php
function foo(&$arg)
{
$arg = 1;
}
在参数前面加上&
可以将值传递变为引用传递,在函数内对变量做的操作会改变函数外的变量
<?php
function foo($arg='demo')
{
var_dump($arg);
}
默认值必须是常量表达式,不能是变量、类成员、函数调用等
<?php
function foo($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
function foo(first_num: $a, last_num: $b)
{
return $a + $b;
}
返回值
使用return可以返回任何类型数据,return会立即终止函数的执行,并将执行权交还给调用者
可以使用list
解包数组类型的返回值
<?php
function foo()
{
return ['one', 'two'];
}
list($a, $b) = foo();
函数返回引用类型值时,函数声明和函数调用前都必须加&
<?php
function &foo()
{
$a = 1;
return $a;
}
$b = &foo();
可变函数
如果变量名后有()
,PHP将寻找与变量的值同名的函数,并尝试执行
<?php
$funName = 'foo';
// 函数
function foo($a)
{
var_dump($a);
}
$funName('demo');
// 类方法
class Test()
{
static $foo = 'attribute';
public function foo($a)
{
var_dump($a);
}
public static function two($a)
{
var_dump($a);
}
}
(new Test())->$funName('test'); // 方式一
$fun = ['Test', 'foo']; // 方式二
$fun();
$fun = [new Test, '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);
}
}
}
箭头函数 <sub>PHP 7.4</sub>
箭头函数跟匿名函数一样,都是通过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 syntax <sub>PHP 8.1</sub>
这是一中引用闭包的新方法
<?php
// PHP8.1之前
// 使用Closure将函数转成闭包形式
$closure = Closure::fromCallable('strlen');
var_dump($closure('sssss'));
// PHP8.1
$closure = strlen(...);
var_dump($closure('demo'));
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有