Почему ссылка может ссылаться на несколько переменных?

Значения, которые печатаются, равны 11 и 12. Почему это? И есть ли способ удалить ссылку на клон?

class A {
public $z = 10;
}

$a1 = new A();

$z = &$a1->z;

$a2 = clone $a1;

$a1->z = 11;

var_dump($z);

$a2->z = 12;

var_dump($z);

3

Решение

Почему это?

A: Когда вы клонируете, вы также клонируете ссылку.

$z = &Ref to $a1->z [0x000F]

$a2-z = [0x000F]

$a1->z = 11; //[0x000F] = 11;

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

Единственный способ разыменовать это значение — сбросить его.

unset($a2->z);
$a2->z = 12;

Вот полный пример.

class A {
public $z = 10;
}

$a1 = new A();

$z = &$a1->z;

$a2 = clone $a1;

$a3 = clone $a2;

$a1->z = 11;

var_dump($z);

$a2->z = 12;

var_dump($z);

unset($a3->z);
$a3->z = 13;
var_dump($z);
var_dump($a3->z);

Выход

int(11)
int(12)
int(12) //$z
int(13) //$a3->z So $a3->z is now unlinked from the Unset

Надеюсь, это ответит на ваш вопрос

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]