在PHP中进行方法链接时调用不同的进程


Calling a different process when method chaining in PHP?

首先,对不起我有缺陷的英语和愚蠢: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>

--怎么了?

appendChild返回附加的子项,因此您的下一个appendChild将对该返回值进行操作。

因此,在您的第一个示例中,您一直在处理$name,在第二个示例中两次处理$name,一次处理$firstname

请参阅:http://www.php.net/manual/en/domnode.appendchild.php

不太清楚你的意思。

无论如何,正如你可能知道的那样,链接是这样完成的:

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

如果你需要一个返回另一种对象的方法,它是这样做的:

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

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

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