大佬教程收集整理的这篇文章主要介绍了是否允许在PHP中链接调用方法?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class A{ __invoke(){ // return an instance of class A itself } }
我可以这样做吗?
new A()()()()... or (new A())()()()...
这是什么解释?
假设php版本比5.4更新
好的,我可以再解释一下为什么我要问:
我正在使用ganon.php这是一个开源的html dom解析器.
它使用类似$html_node(‘child_tag’)的语法来返回另一个子$html_node,其中$html_node是类HTML_NODE的对象实例.所以我在想是否可以使用链接在嵌套的html dom结构中进行选择.
class A{ public function __invoke($arg){ echo __METHOD__ . "($arg) called" . php_EOL; } } $a = new A(); $a(0); $a(1)(2)(3);
A::__invoke(0) called A::__invoke(1) called Fatal error: Function name must be a String
(demo)
您可能对variable functions功能感到困惑.如果foo()返回’bar’字符串,则foo()()等于bar():
class A{ public function __invoke(){ return 'Hello'; } } function Hello($Name) { echo "Hello,$name!" . php_EOL; } $a = new A(); $a()('Jim');
Hello,Jim!
(demo)
只要函数返回带有效函数名的更多字符串,您就可以链接它,但__invoke和类都不起任何相关作用:
function one() { return 'two'; } function two() { return 'three'; } function three() { return 'four'; } function four() { echo 'Done!'; } $a = one()()()();
Done!
(demo)
注意:上面的所有代码片段都需要php / 7,但只需使用适当的括号和中间变量就可以使用早期版本进行模拟.
根据Ulricheckhardt的评论更新:我忽略了返回A类本身评论的实例.如果你真的这样做,代码确实有效:
class A{ public function __invoke($arg){ echo __METHOD__ . "($arg) called" . php_EOL; return $this; } } $a = new A(); $a(0); $a(1)(2)(3);
class A{ public function __invoke($arg){ echo __METHOD__ . "($arg) called" . php_EOL; return $this; } } $a = new A(); $a(0); $a(1)(2)(3);
(demo)
当然,这是php / 7语法.对于旧版本,您需要具有突破魔力的辅助变量:
$a = new A(); $b = $a(1); $c = $b(2); $d = $c(3); $d(4);
以上是大佬教程为你收集整理的是否允许在PHP中链接调用方法?全部内容,希望文章能够帮你解决是否允许在PHP中链接调用方法?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。