get_object_vars() vs. Umwandlung in ein Array

Lesezeit: 2 Minuten

Benutzer-Avatar
Schreiber

Gibt es Unterschiede zw get_object_vars($obj) und (array) $obj ?

Beide scheinen die öffentlichen Eigenschaften des Objekts zurückzugeben.

Welches ist besser?

Benutzer-Avatar
zneak

Das ist nicht ganz richtig.

get_object_vars ist bereichsabhängig und gibt alles zurück sichtbar Eigenschaften ausgenommen statisch Eigenschaften unabhängig von ihrer Sichtbarkeit. Wenn Sie es von außerhalb Ihrer Klasse aufrufen, erhalten Sie nur die öffentlichen Mitglieder; von einer abgeleiteten Klasse erhalten Sie die geschützten und öffentlichen Mitglieder; und von der Klasse selbst erhalten Sie alle Mitglieder. Die Array-Schlüssel stellen die Eigenschaftsnamen dar und werden nicht verändert.

Das (array) cast gibt, zumindest auf PHP 5.3.0, alle Objekteigenschaften zurück, öffentliche und andere. Die Namen der Eigenschaften werden entsprechend ihrer Schutzstufe entstellt:

  • public: nicht entstellt, identisch mit Eigenschaftsnamen
  • protected: Schlüsselname für Eigenschaft beginnt mit a *
  • private: Schlüsselname für Eigenschaft beginnt mit dem Namen der Klasse

Sehen Casting in ein Array für weitere Informationen.

Ich hoffe, Sie können besser verstehen, welche für Ihre Situation am besten geeignet ist.

  • Um hinzuzufügen, für die (array) Besetzung, die * für geschützt und die Klassenname für private Mitglieder werden in Nullbytes eingeschlossen (\x00), so streng ist es \x00*\x00 für geschützte Mitglieder und ebenso für die privaten Mitglieder: \x00className\x00. Verwandt: Array to Object und Object to Array in PHP – interessantes Verhalten

    – hakre

    9. Juli 2011 um 9:33 Uhr


  • Ein weiterer Unterschied (zumindest in PHP 5) : with get_object_vars Die Schlüssel werden in int umgewandelt, wenn es sich um Zahlen handelt, wobei das Casting String-Indizes zurückgibt: 3v4l.org/2Wb9j

    – Sherbrow

    30. August 2016 um 15:24 Uhr


  • Noch eins dazu (array) ist, dass es nicht enthalten ist static Eigenschaften entweder unabhängig von ihrer Sichtbarkeit.

    – revo

    1. Juli 2019 um 7:54 Uhr

Benutzer-Avatar
André

Das get_object_vars() Funktion ist eine klarere Methode, um den gewünschten Effekt zu erzielen. Obwohl das Casting in ein Array ebenfalls eine Lösung ist, könnte sich dieses Verhalten in späteren Versionen von PHP ändern.

Ich weiß nicht, ob es einen tatsächlichen Unterschied zwischen den beiden Methoden gibt, aber die obigen Argumente würden mich dazu bringen, die Funktion zu verwenden.

  • Warum sollte der Array-Cast in seinem Verhalten weniger zuverlässig sein als die Funktion? Haben Sie Unterlagen, die dies belegen?

    – zneak

    24. März 2010 um 23:50 Uhr

Besser ist das, was Sie wirklich brauchen. get_object_vars() zeigt keine privaten und geschützten Mitglieder. Sehen dieser Kommentar im Handbuch für ein Beispiel.

1245620cookie-checkget_object_vars() vs. Umwandlung in ein Array

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy