Gibt es Unterschiede zw get_object_vars($obj)
und (array) $obj
?
Beide scheinen die öffentlichen Eigenschaften des Objekts zurückzugeben.
Welches ist besser?
Schreiber
Gibt es Unterschiede zw get_object_vars($obj)
und (array) $obj
?
Beide scheinen die öffentlichen Eigenschaften des Objekts zurückzugeben.
Welches ist besser?
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 Eigenschaftsnamenprotected
: Schlüsselname für Eigenschaft beginnt mit a *
private
: Schlüsselname für Eigenschaft beginnt mit dem Namen der KlasseSehen 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
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.