2010-03-24 20 views

Respuesta

41

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 propiedades
  • protected: nombre de la clave para la propiedad comienza con un *
  • private: nombre de la clave para la propiedad comienza con el nombre de la clase

Consulte 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.

+7

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

+1

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

2

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.

+2

¿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

1

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.