为什么PHP中数组类型的可变函数变量可以直接调用执行?
这是PHP可变函数针对**可调用类型(callable)**的预设语法规则,属于官方定义的合法用法:
- PHP执行
$func()这类可变调用时,不会强制要求$func必须是字符串类型,会优先检测变量是否符合可调用类型的结构要求,只要满足规则就能正常执行。 - 双元素数组是PHP可调用类型的标准写法之一,解析规则如下:
- 第一个元素为字符串类名、第二个元素为字符串方法名时,会自动识别为调用该类的对应静态方法,你示例中的
array("Foo", "bar")就符合这条规则,所以可以正常调用静态方法bar() - 第一个元素为类的实例对象、第二个元素为字符串方法名时,会自动识别为调用该实例的对应普通方法,你示例中的
array(new Foo, "baz")符合这条规则,所以可以正常调用实例方法baz()
- 第一个元素为字符串类名、第二个元素为字符串方法名时,会自动识别为调用该类的对应静态方法,你示例中的
- 你示例中的
"Foo::bar"字符串写法,也是PHP预设的可调用类型格式,会被解析为调用Foo类的静态bar方法。
你可以通过is_callable()函数验证这几个$func变量的返回值均为true,就说明PHP本身认可它们是合法的可调用结构,和平时我们给call_user_func()传的回调参数识别规则完全一致。
内容的提问来源于stack exchange,提问作者ikhvjs
相关产品推荐
相关产品推荐

