Como sabemos, crear objetos anónimos en JavaScript es fácil, como el siguiente código:
var object = {
p : "value",
p1 : [ "john", "johnny" ]
};
alert(object.p1[1]);
Salida:
an alert is raised with value "johnny"
¿Se puede aplicar esta misma técnica en PHP? ¿Podemos crear objetos anónimos en PHP?
Respuestas:
Han pasado algunos años, ¡pero creo que necesito mantener la información actualizada!
Desde PHP 7 ha sido posible crear clases anónimas, por lo que puede hacer cosas como esta:
Puedes leer más sobre esto en el manual
Pero no sé qué tan similar se implementa a JavaScript, por lo que puede haber algunas diferencias entre las clases anónimas en JavaScript y PHP.
fuente
"Anónimo" no es la terminología correcta cuando se habla de objetos. Sería mejor decir "objeto de tipo anónimo ", pero esto no se aplica a PHP.
Todos los objetos en PHP tienen una clase. La clase "predeterminada" es
stdClass
, y puede crear objetos de esta manera:También puede aprovechar la conversión de una matriz a un objeto para una sintaxis más conveniente:
Sin embargo, tenga en cuenta que lanzar una matriz a un objeto probablemente arroje resultados "interesantes" para aquellas claves de matriz que no son nombres de variables PHP válidos; por ejemplo, aquí hay una respuesta mía que muestra lo que sucede cuando las claves comienzan con dígitos.
fuente
¡Sí, es posible! Usando esta simple clase de Objeto Anónimo de PHP . Cómo funciona:
Por supuesto, este objeto es una instancia de
AnObj
clase, por lo que no es realmente anónimo, pero permite definir métodos sobre la marcha, como lo hace JavaScript.fuente
Hasta hace poco, así es como creé objetos sobre la marcha.
Luego:
Pero ahora voy con:
Entonces como antes:
Por supuesto, si ya conoce las propiedades y los valores, puede establecerlos dentro como se ha mencionado:
NB: No sé en qué versiones de PHP funciona esto, por lo que deberá tenerlo en cuenta. Pero creo que el primer enfoque (que también es corto si no hay propiedades para establecer en la construcción) debería funcionar para todas las versiones que tienen json_encode / json_decode
fuente
Convierta la matriz en un objeto (pero esto no es recursivo para los hijos secundarios):
fuente
Si desea imitar JavaScript, puede crear una clase
Object
y así obtener el mismo comportamiento. Por supuesto, esto ya no es anónimo, pero funcionará.Eso dará salida al elemento 2 . Esto fue robado de un comentario en PHP: Clases y objetos .
fuente
El soporte para clases anónimas ha estado disponible desde PHP 7.0, y es el análogo más cercano al ejemplo de JavaScript proporcionado en la pregunta.
La declaración de visibilidad en las propiedades no se puede omitir (solo la utilicé
var
porque es más corta quepublic
).Al igual que JavaScript, también puede definir métodos para la clase:
fuente
De la documentación de PHP, algunos ejemplos más:
$ obj1 y $ obj3 son del mismo tipo, pero $ obj1! == $ obj3. Además, los tres json_encode () a un simple objeto JS {}:
Salidas:
https://www.php.net/manual/en/language.types.object.php
fuente
Si desea crear un objeto (como en JavaScript) con propiedades dinámicas, sin recibir una advertencia de propiedad indefinida, cuando no ha establecido un valor en propiedad
fuente
No, porque javascript utiliza prototipos / declaración directa de objetos, en PHP (y en muchos otros lenguajes OO), un objeto solo se puede crear a partir de una clase.
Entonces la pregunta es: ¿puedes crear una clase anónima?
Nuevamente, la respuesta es no: ¿cómo crearías una instancia de la clase sin poder hacer referencia a ella?
fuente
Object var = new Object() { ... };
- C ++:class { ... } var;
Para quien quiere un objeto recursivo:
fuente
Anoynmus objeto wiki
fuente