Почему это происходит в php? в чем смысл вывода? - PullRequest
0 голосов
/ 31 августа 2018
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;

screenshot

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

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

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

.

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

Например:

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

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

0 голосов
/ 31 августа 2018

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

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

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

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

$foo1 = clone $foo2 = new foo;
0 голосов
/ 31 августа 2018
$foo1 = $foo2 = new foo;

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

...