次の構造を持つ ListNode を構築しました。
class MyNode {
private $weight;
private $children;
private $t1;
private $t2;
private $t3;
***
more variables
***
function __constructr($weight, $t1, $t2, $t3, $children = array()) {
$this->weight = $weight;
$this->children = $children;
$this->t1 = $t1;
$this->t2 = $t2;
$this->t3 = $t3;
}
ここで、データは同じで重みが異なる 5 つのノードを作成します。
$n1 = new MyNode(25, 't_1', 't_2', 't_3');
$n2 = new MyNode(30, 't_1', 't_2', 't_3');
$n3 = new MyNode(49, 't_1', 't_2', 't_3');
$n4 = new MyNode(16, 't_1', 't_2', 't_3');
$n5 = new MyNode(62, 't_1', 't_2', 't_3');
t1、t2、および t3 は異なる場合がありますが、この 5 つのノードでは同じであることに注意してください。上記を行う代わりに、ある種のクローン機能を使用して次のことを行いたい
$n1 = new MyNode(25, 't_1', 't_2', 't_3');
$n2 = $n1->clone(array('weight' => 30));
$n3 = $n2->clone(array('weight' => 49));
$n4 = $n4->clone(array('weight' => 16));
$n5 = $n5->clone(array('weight' => 62));
clone 関数は、変更したい MyNode 内の変数名とその値であるキーの配列を取ります。したがって、array('weight' => 30)は$this->weight = 30; に変更する必要があります。 配列から変数にアクセスするのに行き詰まりました。すべての値が現在のノードと同じである新しいノードを作成する必要がありますが、配列にあるもののみを変更する必要があります。
function clone($changeVariables) {
-----
}