Код: Выделить всё
function test($test) {
return new class($test) {
public function __construct(public $test) {}
};
}
function test2($test) {
return new class($test) {
public function __construct(public $test) {}
};
}
function compare($a, $b) {
var_dump([
$a == $b,
$a === $b,
get_class($a) == get_class($b),
]);
}
compare(test(1), test(1)); // true, false, true,
compare(test(['abc']), test(1)); // false, false, true,
compare(test(1), test2('xx')); // false, false, false
compare(test('xx'), test2('xx')); // false, false, false
< /code>
Я объясняю это себе таким образом, что PHP просто заменяет там случайное имя. Таким образом, на самом деле есть просто класс с некоторым именем, и запуск одной и той же функции несколько раз не меняет имя, поэтому класс одинаково. класс, использующий один код, который имеет одинаковый синтаксис, но представляет собой разные классы. Потому что теперь я не могу представить, что копировать это и создать test3 ()
Чтобы вызвать метод, Класс, реализующий какой -то интерфейс. > Интерфейс содержит только 1 метод, который должен вернуть строку. < /p>
Поэтому я генерирую случайную строку перед созданием объекта класса, затем устанавливаю поле через конструктор, и метод будет вернуть значение этого Field.
Но я решил, что одного теста было недостаточно. >
К сожалению, внутри этого механизма выполняется проверка на основе :: class < /code>. Таким образом, наличие 50 различных объектов, которые возвращали разные значения с метода, не имеет значения, если они были одинаковыми классами, и с точки зрения этого механизма это было важно (я не буду подробно, почему, потому что это потребовалось какое -то время), отсюда и мой вопрос.
Подробнее здесь: https://stackoverflow.com/questions/794 ... same-class