¿Hay alguna diferencia entre get_object_vars($obj)
y (array) $obj
?get_object_vars() vs. cast a array
Ambos parecen devolver las propiedades públicas del objeto.
Cual es mejor?
¿Hay alguna diferencia entre get_object_vars($obj)
y (array) $obj
?get_object_vars() vs. cast a array
Ambos parecen devolver las propiedades públicas del objeto.
Cual es mejor?
Esto no es exactamente así.
get_object_vars
margen sensible y devolverá todos visibles propiedades excepto propiedades estáticas independientemente de su visbility. Si lo llamas desde fuera de tu clase, solo obtendrás los miembros públicos; de una clase derivada, obtendrá los miembros protegidos y públicos; y de la clase en sí, obtendrá todos los miembros. Las teclas de matriz representan los nombres de las propiedades y no se alteran.
El molde (array)
devuelve, al menos en PHP 5.3.0, todas las propiedades del objeto, públicas y de otro tipo. El nombre de las propiedades se ha mezclado en función de su nivel de protección:
public
: No destrozado, idénticos a los nombres de propiedadesprotected
: nombre de la clave para la propiedad comienza con un *
private
: nombre de la clave para la propiedad comienza con el nombre de la claseConsulte casting to an array para obtener más información.
Espero que pueda entender mejor cuál es la más adecuada para su situación.
La función get_object_vars()
es un método más claro para lograr el efecto que desea. Si bien la conversión a una matriz también es una solución, este comportamiento podría cambiar en versiones posteriores de PHP.
No sé si hay una diferencia real entre los dos métodos, pero los argumentos anteriores me llevarían a utilizar la función.
¿Por qué debería el molde de matriz ser menos confiable en su comportamiento que la función? ¿Tienes documentación que lo respalde? – zneak
Mejor es lo que realmente necesita. get_object_vars() no muestra miembros privados y protegidos. Consulte this comment en el manual para ver un ejemplo.
Para agregar, para el molde '(matriz)', '' 'para protegido y * classname * para miembros privados estarán encerrados en null-bytes (' \ x00'), así que estrictamente es '\ x00 * \ x00 'para miembros protegidos y también para los miembros privados:' \ x00className \ x00'. Relacionado: ** [Matriz de objeto y objeto para mapear en PHP - comportamiento interesante] (http://stackoverflow.com/questions/6325447/array-to-object-and-object-to-array-in-php-interesting -behaviour/6325631 # 6325631) ** – hakre
Otra diferencia (al menos en PHP 5): con 'get_object_vars' las claves se lanzarán a int si son números, donde la conversión arroja índices de cadena: https://3v4l.org/ 2Wb9j – Sherbrow