Как ключевое слово «new» используется с «переменной объекта», которая уже содержит «идентификатор объекта» для некоторого уже существующего «объекта» некоторого класса?

я использую PHP 7.3.0

Рассмотрим ниже код из Руководство по PHP :

<?php
class Test
{
static public function getNew()
{
return new static;
}
}

class Child extends Test
{}

$obj1 = new Test();
$obj2 = new $obj1;
var_dump($obj1 !== $obj2);

?>

Вывод вышеуказанного кода:

bool(true)

Насколько я понимаю, переменная объекта $obj1 содержит идентификатор объекта, который позволяет методам доступа к объекту найти фактический объект класса Test,

Затем, как эта переменная объекта с именем $obj1 был префикс с ключевым словом new когда он присваивается переменной $obj2?

Переменная объекта $obj1 должен содержать идентификатор объекта для объекта класса Test,

Что было достигнуто здесь с помощью new Ключевое слово с переменной объекта, которая уже содержит некоторый идентификатор объекта?

Что на самом деле сравнивается в var_dump() заявление?

Почему вывод сравнения верен?

0

Решение

new $obj1 создаст новый экземпляр $obj1::class (который Test).

Сравнение в пределах var_dump() Заявление является строгий сравнение между двумя объектами. Возвращается true потому что это строгое сравнение проверяет, что эти два экземпляра ($obj1 а также $obj2) не являются ссылками на один и тот же экземпляр одного и того же класса.

Если сравнение не было строгим (например, $obj1 != $obj2) это вернется ложный, поскольку $obj1 == $obj2 (например, оба имеют одинаковые атрибуты и значения и являются экземплярами одного и того же класса)

Узнайте больше о сравнении объектов на эта страница в документации.

То, что вы используете 7.3, в основном несущественно. Вы бы получили те же результаты с 5.3 года

4

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

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

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