PHP   发布时间:2019-11-21  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了是否允许在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结构中进行选择.

解决方法

我不认为您描述的行为实际上有效,即使在php / 7中:
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,请注明来意。