【问题标题】:Calling a different process when method chaining in PHP?在 PHP 中进行方法链接时调用不同的进程?
【发布时间】:2011-06-03 10:46:46
【问题描述】:

首先,对不起我有缺陷的英语和愚蠢:O

我只是想知道在方法链接中使这成为可能的任何过程。根据 DOMDocument 类,如果我们执行方法链接,字符的顺序会相应地改变,例如:

$dom = new DOMDocument();

$applicant = $dom->createElement('applicant');

$name = $dom->createElement('name');
$firstname = $dom->createElement('firstname', 'Joe');
$middlename = $dom->createElement('middlename', 'Johnson');
$lastname = $dom->createElement('lastname', 'Smith'); 

$dom->appendChild($applicant);
$applicant->appendChild($name);
    $name->appendChild($firstname);
    $name->appendChild($middlename);
$name->appendChild($lastname);

//输出

<applicant>
   <name>
      <firstname>Joe</firstname>
      <middlename>Johnson</middlename>
      <lastname>Smith</lastname>
   </name>
</applicant>

如果我这样做

$dom->appendChild($applicant);
$applicant->appendChild($name);
        $name->appendChild($firstname)
             ->appendChild($middlename);
$name->appendChild($lastname);

//输出

<applicant>
   <name>
      <firstname>
           Joe
           <middlename>Johnson</middlename>
      </firstname>
           <lastname>Smith</lastname>
   </name>
</applicant>

-- 怎么样?

【问题讨论】:

    标签: php methods domdocument chaining


    【解决方案1】:

    appendChild 返回附加的孩子,所以你的下一个appendChild 作用于那个返回值。

    因此,在您的第一个示例中,您总是在 $name 上工作,第二个在 $name 上工作两次,在 $firstname 上工作一次。

    见:http://www.php.net/manual/en/domnode.appendchild.php

    【讨论】:

    • 如果是这种情况,我认为方法链接应该是不可能的,因为应该返回类的实例 ($this)。 ://
    • @Rei 它在哪里声明$this 被返回? appendChild 的手册显示返回了新附加的子项。我希望你不要把它和 jQuery 的工作原理混为一谈?
    • 没有。我不是说 $this 被退回了。根据yes123发布的内容。需要返回值 $this 才能执行链式方法。
    • @Rei 啊!是的,这是正确的。这给您留下了一个简单的结论,即在使用 php DOM* 对象时您将无法使用链接。 :)
    【解决方案2】:

    不太清楚你的意思。

    无论如何,你可能知道它是这样完成的:

    public function method() {
      //> Code
      return $this;
    }
    

    如果您需要一个返回另一种对象的方法,可以这样做:

    public function method() {
      //> Code
      return new ObjectOtherTypeWhatEver;
    }
    

    当然你可以像这样返回另一个对象的另一个实例(appendChild 方法是什么):

    public function method($object) {
      //> Code
      return $object;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多