PHP DOM, цепочка методов

У меня есть следующая строка кода, тогда как первая нотация делает то, что должна (добавление XML-элемента и его содержимого в DOM), но не в том случае, если я связываю методы.

/**
 * @var string $key
 * @var DOMNode $value
 */
$newElem = $dom->createElement($key);
$newElem->appendChild($value);

Следующий пример приведет к E_WARNING: DOMNode::appendChild(): Не удалось получить DOMNode. (Мне требуется около часа, чтобы найти эту ошибку/ошибку.)

$newElem = $dom->createElement($key)->appendChild($value);

Кто-нибудь может объяснить, почему один и тот же код в разных нотациях приводит к ошибкам?

РЕДАКТИРОВАТЬ: я загрузил тестовый пример, что приводит к ошибке E-WARNING при работе с PHP 5.3.5.


person feeela    schedule 04.07.2011    source источник
comment
Я не могу воспроизвести вашу ошибку. Можете ли вы показать, что в $key и $value?   -  person Yoshi    schedule 04.07.2011
comment
То же самое здесь, работает как положено, и теперь отображается ошибка; какую именно версию PHP вы используете?   -  person wonk0    schedule 04.07.2011
comment
Он выполняется в цикле, ключ всегда является строкой, называющей новый элемент (например, «имя»). Значение равно DOMCharacterData или DOMText, в зависимости от ключа (например, $dom->createTextNode('Test-Marker')). Я протестировал программу несколько раз, не меняя никаких других частей, кроме той, что вставлена ​​выше. Я использую PHP 5.3.5 на Ubuntu 11.04.   -  person feeela    schedule 04.07.2011


Ответы (2)


Из-за синтаксиса PHP невозможно, чтобы здесь была разница.

$b = $a; $b->c(); совпадает с $a->c();.

Что-то еще не так с вашим кодом.

person Lightness Races in Orbit    schedule 04.07.2011
comment
Это невозможно - по крайней мере, так должно быть :) - person feeela; 05.07.2011

Как насчет этого?

$newElem = ($dom->createElement($key))->appendChild($value);

помните, что в этом случае $newElem является добавленным узлом, а не родительским элементом.

person fdaines    schedule 04.07.2011
comment
Дополнительные скобки не должны изменять функциональность. - person Gedrox; 04.07.2011