1163 Stimmen

Was ist stdClass in PHP?

Bitte definieren Sie, was stdClass ist.

28voto

使用方法 stdClass können Sie ein neues Objekt mit seinen eigenen Eigenschaften erstellen. Betrachten Sie das folgende Beispiel, das die Details eines Benutzers als assoziatives Array darstellt.

$array_user = array();
$array_user["name"] = "smith john";
$array_user["username"] = "smith";
$array_user["id"] = "1002";
$array_user["email"] = "smith@nomail.com";

Wenn Sie die gleichen Details wie die Eigenschaften eines Objekts darstellen müssen, können Sie stdClass wie unten.

$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "smith@nomail.com";

Wenn Sie ein Joomla-Entwickler sind, empfehlen dieses Beispiel in den Joomla-Dokumenten zum weiteren Verständnis.

24voto

supersan Punkte 5005

Der Grund, warum wir stdClass ist, weil es in PHP keine Möglichkeit gibt, ein normales Array von einem assoziierten Array zu unterscheiden (wie in Javascript haben Sie {} für Objekt und [] für das Array, um sie zu unterscheiden).

Dies stellt ein Problem für leere Objekte dar. Nehmen wir zum Beispiel dies.

PHP:

$a = [1, 2, 3]; // this is an array
$b = ['one' => 1, 'two' => 2]; // this is an associate array (aka hash)
$c = ['a' => $a, 'b' => $b]; // this is also an associate array (aka hash)

Nehmen wir an, Sie möchten die Variable $c in JSON kodieren

echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': {one: 1, two: 2}}

Nehmen wir nun an, Sie haben alle Schlüssel aus $b und macht ihn leer. Da $b jetzt leer ist (Sie haben alle Schlüssel gelöscht, erinnern Sie sich?), sieht es so aus [] das entweder ein Array oder ein Objekt sein kann.

Wenn Sie also erneut einen json_encode durchführen, wird die Ausgabe anders aussehen

echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': []}

Dies ist ein Problem, denn wir wissen b das eigentlich ein assoziiertes Array sein sollte, aber PHP (oder eine Funktion wie json_encode) tut das nicht.

Also kommt stdClass zur Rettung. Nehmen wir noch einmal das gleiche Beispiel

$a = [1, 2, 3]; // this is an array
$b = (object) ['one' => 1, 'two' => 2]; // this makes it an stdClass
$c = ['a' => $a, 'b' => $b]; // this is also an associate array (aka hash)

Selbst wenn Sie nun alle Schlüssel aus $b und machen Sie es leer, da es eine stdClass ist es keine Rolle, und wenn Sie json_encode es erhalten Sie diese:

echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': {}}

Dies ist auch der Grund, warum json_encode y json_decode standardmäßig stdClass zurück.

 $c = json_decode('{"a": [1,2,3], "b": {}}', true); //true to deocde as array
 // $c is now ['a' => [1,2,3], 'b' => []] in PHP
 // if you json_encode($c) again your data is now corrupted

23voto

John Smith Punkte 1035

StdClass ist weder eine anonyme Klasse noch ein anonymes Objekt

Die Antworten umfassen Ausdrücke, die stdClass ist eine anonyme Klasse oder sogar ein anonymes Objekt. Es ist kein echtes.

stdClass ist einfach eine normale vordefinierte Klasse. Sie können dies überprüfen mit instanceof Operator oder Funktion get_class . Hier geht nichts Besonderes. PHP verwendet diese Klasse beim Casting anderer Werte in ein Objekt.

In vielen Fällen, in denen stdClass von den Programmierern verwendet wird, ist das Array die bessere Option, weil es nützliche Funktionen bietet und die Tatsache, dass dieser Anwendungsfall die Datenstruktur und nicht ein echtes Objekt darstellt.

12voto

Antony Punkte 3278

Es ist auch erwähnenswert, dass durch die Verwendung von Casting Sie nicht wirklich brauchen, um ein Objekt wie in der Antwort von @Bandula gegeben zu erstellen. Stattdessen können Sie Ihr Array einfach in ein Objekt umwandeln und die stdClass wird zurückgegeben. Zum Beispiel:

$array = array(
    'Property1'=>'hello',
    'Property2'=>'world',
    'Property3'=>'again',
);

$obj = (object) $array;
echo $obj->Property3;

Output: again

8voto

DevWL Punkte 14388

StdClass-Objekte in Verwendung

Mit der stdClass können Sie anonyme Klassen erstellen und mit Objekt-Casting können Sie auch auf Schlüssel eines assoziativen Arrays im OOP-Stil zugreifen. Genauso wie Sie auf die normale Objekteigenschaft zugreifen würden.

Beispiel

class Example {

  private $options;

  public function __construct(Array $setup)
  {
    // casting Array to stdClass object
    $this->options = (object) $setup;

    // access stdClass object in oop style - here transform data in OOP style using some custom method or something...
    echo $this->options->{'name'}; // ->{'key'}
    echo $this->options->surname;  // ->key
  }

}

$ob1 = new Example(["name" => "John", "surname" => "Doe"]);

echot dann

Unbekannter

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X