PHP方法链接还是流畅的界面?

2022-08-30 06:28:16

我正在使用PHP 5,我听说过面向对象方法中的一个新功能,称为“方法链接”。它到底是什么?如何实现它?


答案 1

这很简单,真的。您有一系列赋值函数方法,这些方法都返回原始(或其他)对象。这样,您就可以继续对返回的对象调用方法。

<?php
class fakeString
{
    private $str;
    function __construct()
    {
        $this->str = "";
    }
    
    function addA()
    {
        $this->str .= "a";
        return $this;
    }
    
    function addB()
    {
        $this->str .= "b";
        return $this;
    }
    
    function getStr()
    {
        return $this->str;
    }
}


$a = new fakeString();


echo $a->addA()->addB()->getStr();

这将输出“ab”

在线试用!


答案 2

基本上,你拿一个对象:

$obj = new ObjectWithChainableMethods();

调用一个方法,该方法在最后有效地执行:return $this;

$obj->doSomething();

由于它返回相同的对象,或者更确切地说,是对同一对象的引用,因此您可以继续从返回值中调用同一类的方法,如下所示:

$obj->doSomething()->doSomethingElse();

就是这样,真的。两件重要的事情:

  1. 正如你所注意到的,它只是 PHP 5。它在 PHP 4 中无法正常工作,因为它按值返回对象,这意味着您正在对象的不同副本上调用方法,这会破坏您的代码。

  2. 同样,您需要在可链接方法中返回对象:

    public function doSomething() {
        // Do stuff
        return $this;
    }
    
    public function doSomethingElse() {
        // Do more stuff
        return $this;
    }
    

推荐