支持可变函数调用的php函数,可变函数 - PHP 7 中文文档

PHP支持可变函数,允许通过变量调用同名函数,常用于回调和函数表。不过,某些语言结构如echo、print等不能直接作为可变函数,需要包装函数。此外,可变方法调用能实现动态调用对象的方法,包括静态和非静态。从PHP5.4.0开始,可以使用存储在变量中的任何可调用类型(如数组或字符串)来调用函数或方法。
摘要由CSDN通过智能技术生成

可变函数

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP

将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

可变函数不能用于例如

[echo](php7/function.echo),[print](php7/function.print),[unset()](php7/function.unset),[isset()](php7/function.isset),[empty()](php7/function.empty),[include](php7/function.include),[require](php7/function.require)

以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。

Example #1 可变函数示例

function foo() {

echo "In foo()
\n";

}

function bar($arg = '') {

echo "In bar(); argument was '$arg'.
\n";

}

// 使用 echo 的包装函数

function echoit($string)

{

echo $string;

}

$func = 'foo';

$func(); // This calls foo()

$func = 'bar';

$func('test'); // This calls bar()

$func = 'echoit';

$func('test'); // This calls echoit()

?>

也可以用可变函数的语法来调用一个对象的方法。

Example #2 可变方法范例

class Foo

{

function Variable()

{

$name = 'Bar';

$this->$name(); // This calls the Bar() method

}

function Bar()

{

echo "This is Bar";

}

}

$foo = new Foo();

$funcname = "Variable";

$foo->$funcname(); // This calls $foo->Variable()

?>

当调用静态方法时,函数调用要比静态属性优先:

Example #3 Variable 方法和静态属性示例

class Foo

{

static $variable = 'static property';

static function Variable()

{

echo 'Method Variable called';

}

}

echo Foo::$variable; // This prints 'static property'. It does need a $variable in this scope.

$variable = "Variable";

Foo::$variable(); // This calls $foo->Variable() reading $variable in this scope.

?>

As of PHP 5.4.0, you can call any [callable](php7/language.types.callable) stored in a variable.

Example #4 Complex callables

class Foo

{

static function bar()

{

echo "bar\n";

}

function baz()

{

echo "baz\n";

}

}

$func = array("Foo", "bar");

$func(); // prints "bar"

$func = array(new Foo, "baz");

$func(); // prints "baz"

$func = "Foo::bar";

$func(); // prints "bar" as of PHP 7.0.0; prior, it raised a fatal error

?>

参见 [is_callable()](php7/function.is-callable),[call_user_func()](php7/function.call-user-func),[可变变量](php7/language.variables.variable)和

[function_exists()](php7/function.function-exists)。

更新日志

版本

说明

7.0.0

'ClassName::methodName' is allowed as variable function.

5.4.0

Arrays, which are valid callables, are allowed as variable functions.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值