0 レビュー
1 回答
参照のように機能するPHPUnset
コピーを作成しても、PHPが両方のオブジェクトのchildren
プロパティを設定解除する理由を理解できません。
$singleNode = $node
を割り当てると、参照を渡さないため、singleNodeの子を削除するべきではありませんが、そのように動作します。
誰かが私のためにこれを片付けることができますか?
これをPHPCLIで実行して、意味を確認できます
<?php
$ node = new stdClass();
$ node-> title='テスト';
$ node-> children = [1,2,3,4,5];
//ノードにはchildrenがありますか?
if(property_exists($ node、'children')){
echo'$nodeにはchildren'があります。 PHP_EOL;
} そうしないと {
echo'$ node NOThaschildren'。 PHP_EOL;
}
//ノードを新しい変数に割り当て、childrenを削除します
{-コード-2};
if(property_exists($ singleNode、'children')){
echo'$singleNodeが削除されましたchildren'。 PHP_EOL;
unset($ singleNode-> children);
}
//ノードにはchildrenがありますか?
if(property_exists($ node、'children')){
echo'$nodeにはchildren'があります。 PHP_EOL;
} そうしないと {
echo'$ node NOThaschildren'。 PHP_EOL;
}
これができることがわかりました:
$singleNode = clone $node
これを行う正しい方法ですか?なぜこれが起こるのですか?変数を何に割り当てても、変数はメモリ内の同じアイテムを参照していますか?
わからない
0
レビュー
答え :
解決策:
オブジェクトは1つだけです。 2番目のオブジェクトを取得するには、 clone
を作成する必要があります。技術的には、 $singleNode = $node
は、同じオブジェクトを参照しているオブジェクトハンドルをコピーしています。
参照 http://php.net/manual/en/language.oop5.cloning.phpおよびhttp://php.net/manual/en/language.oop5.references.php< / a>
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。