Вопрос

Как мы знаем, создавать анонимные объекты в JavaScript очень просто, как в приведенном ниже коде:

родовое слово

Вывод:

родовое слово

Можно ли применить эту же технику в случае PHP?Можем ли мы создавать анонимные объекты в PHP?

Это было полезно?

Решение

Прошло несколько лет, но я думаю, мне нужно обновлять информацию!


В php-7 можно создавать анонимные классы, поэтому вы можете делать что-то вроде этого:

родовое слово

Подробнее об этом можно прочитать в RFC (принято): https://wiki.php.net/rfc/анонимные_классы

Но я не знаю, насколько он похож на Javscript, поэтому могут быть некоторые различия между анонимными классами в javascript и php.

< sizesEdit:

Судя по опубликованным комментариям, вот ссылка на руководство: http:// php.net / manual / en / language.oop5.anonymous.php

Другие советы

«Анонимный» - неправильная терминология, когда речь идет об объектах. Лучше было бы сказать «объект анонимного типа », но это не относится к PHP.

Все объекты в PHP имеют класс. Класс "по умолчанию" - stdClass , и вы можете создавать его объекты таким образом :

родовое слово

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

родовое слово

Однако имейте в виду, что приведение массива к объекту может дать "интересные" результаты для тех ключей массива, которые не являются допустимыми именами переменных PHP - например, вот мой ответ, который показывает, что происходит, когда ключи начинаются с цифр.

Да, это возможно!Используя этот простой класс анонимного объекта PHP .Как это работает:

родовое слово

Конечно, этот объект является экземпляром класса AnObj, поэтому на самом деле он не анонимен, но позволяет определять методы на лету, как это делает JavaScript.

До недавнего времени я создавал объекты «на лету» именно так.

родовое слово

Затем:

родовое слово

Но теперь я выбираю:

родовое слово

Тогда как раньше:

родовое слово

Конечно, если вы уже знаете свойства и значения, вы можете установить их внутри, как уже упоминалось:

родовое слово

NB: я не знаю, на каких версиях PHP это работает, поэтому вам следует помнить об этом.Но я думаю, что первый подход (который также является коротким, если нет свойств, которые нужно установить при построении) должен работать для всех версий, в которых есть json_encode / json_decode

Если вы хотите имитировать JavaScript, вы можете создать класс Object и, таким образом, получить такое же поведение.Конечно, это уже не совсем анонимно, но это будет работать.

родовое слово

Будет выведен элемент 2 .Это было украдено из комментария к PHP: классы и объекты .

Преобразовать массив в объект:

родовое слово

Если вы хотите создать объект (например, в javascript) с динамическими свойствами, не получая предупреждения о неопределенном свойстве, когда вы не установили значение для свойства

родовое слово
<цитата>

Можно ли применить эту же технику в случае PHP?

Нет - поскольку javascript использует прототипы / прямое объявление объектов - в PHP (и многих других объектно-ориентированных языках) объект может быть создан только из класса.

Итак, возникает вопрос - можете ли вы создать анонимный класс.

И снова ответ - нет - как бы вы создали экземпляр класса, не имея возможности ссылаться на него?

Для тех, кто хочет рекурсивный объект:

родовое слово

Еще несколько примеров из документации PHP:

родовое слово

$ obj1 и $ obj3 одного типа, но $ obj1!== $ obj3.Кроме того, все три будут json_encode () для простого объекта JS {}:

родовое слово

Выводы:

родовое слово

https://www.php.net/manual/en/language.types.object.php

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top