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? в чем смысл вывода?
Я в прошлый раз спросил без кода.
$foo1 = $foo2 = new foo;
Обе переменные содержат один и тот же объект, поэтому установка $foo2->x = 50
также устанавливает его для $foo1
так как это просто другое название для той же вещи.
В отличие от массивов, объекты в PHP не копируются при назначении. Так $foo1
а также $foo2
оба относятся к одному и тому же foo
объект. Любые изменения, внесенные в этот объект, будут видны через любую переменную.
Вы можете инициализировать их с отдельными объектами, используя new foo
дважды:
$foo1 = new foo;
$foo2 = new foo;
или вы можете использовать clone
скопировать объект:
$foo1 = clone $foo2 = new foo;
Это потому, что вы присваиваете $ foo1 и $ foo2 одному и тому же объекту. Следовательно, $ foo1-> x — это та же переменная, что и $ foo2-> x.
На самом деле вы хотите создать два разных экземпляра класса foo.
Например:
$foo1 = new foo();
$foo2 = new foo();
Если вам нужны дальнейшие объяснения, вы можете взглянуть на страница об объектах и ссылках в документации php.