PHP函数

2022-06-01  本文已影响0人  码一

用户自定义函数

<?php
 
/**
 * 示例函数
 *
 * @param mixed $arg1 参数一
 * @param mixed $arg2 参数二
 * @param mixed $argN 参数N
 * @return mixed 
 */
function foo($arg1, $arg2, $argN)
{
    return 'called!';
}

函数参数

返回值
使用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);
        }
    }
}

箭头函数 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 syntax PHP 8.1
这是一中引用闭包的新方法

<?php
// PHP8.1之前
// 使用Closure将函数转成闭包形式
$closure = Closure::fromCallable('strlen');
var_dump($closure('sssss'));

// PHP8.1
$closure = strlen(...);
var_dump($closure('demo'));
上一篇下一篇

猜你喜欢

热点阅读