Вызываете другой процесс, когда цепочка методов в PHP? - PullRequest
0 голосов
/ 03 июня 2011

Во-первых, извините за мой некорректный английский и глупость: 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);

// OUTPUT

<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>

- Как это?

Ответы [ 2 ]

3 голосов
/ 03 июня 2011

appendChild возвращает дочерний элемент, так что ваш следующий appendChild воздействует на это возвращаемое значение.

Итак, в вашем первом примере вы всегда работаете с $name, во втором дважды с $name и один раз с $firstname.

См .: http://www.php.net/manual/en/domnode.appendchild.php

0 голосов
/ 03 июня 2011

Не совсем уверен, что вы имели в виду.

В любом случае цепочка, поскольку вы, вероятно, знаете, что это сделано так:

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

Если вам нужны методы, которые возвращают объект другого типа, это делается так:this:

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

Конечно, вы можете вернуть еще один экземпляр другого объекта, как этот (что делает appendChild методы):

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