класс — Почему это происходит в php? в чем смысл вывода?

class foo {
public $x;
function __construct() {
$this->x = 5;
}
}


$foo1 = $foo2 = new foo;
$f1 = $f2 = 5;

echo "foo1 = ".$foo1->x;
echo PHP_EOL;
echo "foo2 = ".$foo2->x;
$foo2->x = 50;

echo PHP_EOL;
echo "foo1 = ".$foo1->x;
echo PHP_EOL;
echo "foo2 = ".$foo2->x;

Скриншот

Почему это происходит в php? в чем смысл вывода?
Я в прошлый раз спросил без кода.

0

Решение

$foo1 = $foo2 = new foo;

Обе переменные содержат один и тот же объект, поэтому установка $foo2->x = 50 также устанавливает его для $foo1 так как это просто другое название для той же вещи.

6

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

В отличие от массивов, объекты в PHP не копируются при назначении. Так $foo1 а также $foo2 оба относятся к одному и тому же foo объект. Любые изменения, внесенные в этот объект, будут видны через любую переменную.

Вы можете инициализировать их с отдельными объектами, используя new foo дважды:

$foo1 = new foo;
$foo2 = new foo;

или вы можете использовать clone скопировать объект:

$foo1 = clone $foo2 = new foo;
3

Это потому, что вы присваиваете $ foo1 и $ foo2 одному и тому же объекту. Следовательно, $ foo1-> x — это та же переменная, что и $ foo2-> x.

На самом деле вы хотите создать два разных экземпляра класса foo.

Например:

$foo1 = new foo();
$foo2 = new foo();

Если вам нужны дальнейшие объяснения, вы можете взглянуть на страница об объектах и ​​ссылках в документации php.

3