2011-07-04 9 views
3

私は以下のコードラインを持っていますが、最初の表記法はXMLエレメントとそのコンテンツをDOMに追加する必要がありますが、メソッドを連鎖するのではありません。PHP 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); 

誰も説明できますか?

編集:私はuploaded a test-caseでした。その結果、PHP 5.3.5で動作しているときにE-WARNINGエラーが発生します。

+0

エラーを再現できません。 '$ key'と' $ value'に何を表示できますか? – Yoshi

+0

ここに同じ、期待どおりに動作し、エラーが表示されます。どのような正確なPHPのバージョンを使用していますか? – wonk0

+0

これはループで実行され、キーは常に文字列であり、新しい要素(たとえば、「名前」)の名前です。値は '$ dom-> createTextNode( 'Test-Marker')'など)のキーに応じて、 'DOMCharacterData'または' DOMText'です。私は、上記に貼り付けられた部分を変更せずに、プログラムを何度もテストしました。 PHP 5.3.5をUbuntu 11.04で使用しています – feeela

答えて

-1

これはいかがですか?

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

この場合には$ newElemが追加ノードではなく、親要素であることを覚えておいてください。

+1

追加のかっこで機能を変更してはいけません。 – Gedrox

1

PHPの構文のため、ここでは違いがありません。

$b = $a; $b->c();は、$a->c();と同じです。

あなたのコードには何か問題があります。

+0

"不可能です" - 少なくともそれはすべきです:) – feeela

+0

@feeela:It _is_! –

関連する問題