Как создавать анонимные классы, которые не совсем то же самое классPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как создавать анонимные классы, которые не совсем то же самое класс

Сообщение Anonymous »

Я заметил, что анонимные классы, созданные с использованием того же метода, представляют собой те же классы. < /p>

Код: Выделить всё

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 () 
, test4 () , test5 () , ... , test50 () , и и Итак, в зависимости от того, сколько разных классов мне нужно.
Чтобы вызвать метод, Класс, реализующий какой -то интерфейс. > Интерфейс содержит только 1 метод, который должен вернуть строку. < /p>
Поэтому я генерирую случайную строку перед созданием объекта класса, затем устанавливаю поле через конструктор, и метод будет вернуть значение этого Field.
Но я решил, что одного теста было недостаточно. >
К сожалению, внутри этого механизма выполняется проверка на основе :: class < /code>. Таким образом, наличие 50 различных объектов, которые возвращали разные значения с метода, не имеет значения, если они были одинаковыми классами, и с точки зрения этого механизма это было важно (я не буду подробно, почему, потому что это потребовалось какое -то время), отсюда и мой вопрос.

Подробнее здесь: https://stackoverflow.com/questions/794 ... same-class
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»