Frage
Bitte definieren, welche stdClass
ist.
Lösung
stdClass
ist generisch leere Klasse PHP, die Art wie Object
in Java oder object
in Python ( Edit: , aber nicht wirklich als universelle Basisklasse verwendet, dank @Ciaran für diesen Hinweis ).
Es ist nützlich für anonyme Objekte, dynamische Eigenschaften, usw.
Eine einfache Möglichkeit, die StdClass ist als Alternative zu assoziatives Array zu betrachten. Sehen Sie dieses Beispiel unten, dass zeigt, wie json_decode()
ermöglicht eine StdClass Instanz oder ein assoziatives Array zu erhalten.
Auch, aber nicht in diesem Beispiel gezeigt, SoapClient::__soapCall
gibt eine StdClass Instanz.
<?php
//Example with StdClass
$json = '{ "foo": "bar", "number": 42 }';
$stdInstance = json_decode($json);
echo $stdInstance->foo . PHP_EOL; //"bar"
echo $stdInstance->number . PHP_EOL; //42
//Example with associative array
$array = json_decode($json, true);
echo $array['foo'] . PHP_EOL; //"bar"
echo $array['number'] . PHP_EOL; //42
Siehe Dynamische Eigenschaften in PHP und StdClass für weitere Beispiele.
Andere Tipps
stdClass
ist nur eine generische ‚leere‘ Klasse, die verwendet wird, wenn andere Arten von Objekten Gießen. Trotz allem, was die beiden anderen Antworten sagen, ist stdClass
nicht die Basisklasse für Objekte in PHP. Dies kann ziemlich leicht gezeigt werden:
class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'
Ich glaube nicht, dass es ein Konzept eines Basisobjekts in PHP
stdClass ist eine andere große PHP-Funktion. Sie können eine anonyme PHP-Klasse erstellen. Lässt ein Beispiel überprüfen.
$page=new stdClass();
$page->name='Home';
$page->status=1;
Jetzt denken Sie, eine andere Klasse, die mit einem Seitenobjekt und führt Basis auf sie initialisieren wird.
<?php
class PageShow {
public $currentpage;
public function __construct($pageobj)
{
$this->currentpage = $pageobj;
}
public function show()
{
echo $this->currentpage->name;
$state = ($this->currentpage->status == 1) ? 'Active' : 'Inactive';
echo 'This is ' . $state . ' page';
}
}
Nun müssen Sie mit einer Seite Objekt ein neues Objekt erstellen pageshow.
Hier ist keine Notwendigkeit, eine neue Klassenvorlage für diese schreiben Sie einfach stdClass verwenden können, eine Klasse on the fly zu erstellen.
$pageview=new PageShow($page);
$pageview->show();
Auch erwähnenswert, kann ein stdClass
Objekt aus der Verwendung von json_decode()
auch erstellt werden.
Mit stdClass Sie ein neues Objekt mit eigenen Eigenschaften schaffen. 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 siehe dieses Beispiel in der Joomla-Dokumentation für weiteres Verständnis .
Ebenso
$myNewObj->setNewVar = 'newVal';
ergibt eine stdClass Objekt - auto gegossen
ich dies herausgefunden heute durch falsche Schreibweise:
$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';
Cool!
stdClass ist keine anonyme Klasse oder anonymes Objekt
Antworten hier enthalten Ausdrücke, die stdClass
eine anonyme Klasse oder sogar anonymes Objekt. Es ist kein echter.
stdClass
ist nur eine ganz normale vordefinierte Klasse. Sie können diese mit instanceof
Operator oder die Funktion get_class
überprüfen. Nichts Besonderes hier geht. PHP verwendet diese Klasse, wenn andere Werte Gießen zu widersprechen.
In vielen Fällen, in denen stdClass
von den Programmierern verwendet wird, das Array bessere Option ist, weil von nützlichen Funktionen und der Tatsache, dass diese usecase der Datenstruktur stellt keinen reales Objekt.
Eigentlich habe ich versucht, leer stdClass zu schaffen und die Geschwindigkeit auf leere Klasse verglichen.
class emp{}
fuhr dann fort, die Schaffung 1000 stdClasses und emps ... leere Klassen wurden in etwa 1100 Mikrosekunden durchgeführt, während stdClasses mehr als 1700 Mikrosekunden hat. Also ich denke, es ist besser, um Ihre eigenen Dummy-Klasse zu erstellen, um Daten zu speichern, wenn Sie so schlecht, dass Objekte verwenden möchten (Arrays sind viel schneller sowohl für das Schreiben und Lesen).
stdClass Objekte im Einsatz
Die stdClass ermöglicht es Ihnen, anonyme Klassen zu erstellen und mit dem Objekt Gießen Sie auch Schlüssel eines assoziativen Arrays in OOP Stil zugreifen können. Genau wie würden Sie die regelmäßige Objekteigenschaft zuzugreifen.
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"]);
wird echo
John Doe
Es ist auch erwähnenswert, dass Casting eigentlich mit Ihnen nicht über ein Objekt, wie in der Antwort von @Bandula gegeben erstellen müssen. Stattdessen können Sie einfach Ihre Array auf ein Objekt gegossen und die stdClass zurückgeführt wird. Zum Beispiel:
$array = array(
'Property1'=>'hello',
'Property2'=>'world',
'Property3'=>'again',
);
$obj = (object) $array;
echo $obj->Property3;
Output: again
Wenn Sie ein neues Objekt zu schnell erstellen wollten einige Daten über ein Buch zu halten. Sie würde so etwas tun:
$book = new stdClass;
$book->title = "Harry Potter and the Prisoner of Azkaban";
$book->author = "J. K. Rowling";
$book->publisher = "Arthur A. Levine Books";
$book->amazon_link = "http://www.amazon.com/dp/0439136369/";
Bitte überprüfen Sie die Website - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ für weitere Details.
Bitte beachten Sie, dass 2 leer stdClasses ist nicht genau gleich. Dies ist sehr wichtig, wenn Spott Erwartungen zu schreiben.
php > $a = new stdClass();
php > $b = new stdClass();
php > var_dump($a === $b);
bool(false)
php > var_dump($a == $b);
bool(true)
php > var_dump($a);
object(stdClass)#1 (0) {
}
php > var_dump($b);
object(stdClass)#2 (0) {
}
php >
php.net Handbuch hat ein paar solide Erklärung und Beispiele beigetragen von den Nutzern, was stdClass ist, ich besonders wie diese http://php.net/manual/en/language.oop5.basic.php#92123 , https://stackoverflow.com/a/1434375/2352773 .
stdClass ist das Standard-PHP-Objekt. stdClass hat keine Eigenschaften, Verfahren oder Elternteil. Es unterstützt keine magische Methoden und Geräte keine Schnittstellen.
Wenn Sie einen Skalar oder Array als Objekt werfen, erhalten Sie eine Instanz stdClass. Sie können stdClass verwenden, wenn Sie ein generisches Objekt benötigen Beispiel.
stdClass ist nicht eine Basisklasse! PHP-Klassen erben nicht automatisch von jeder Klasse. Alle Klassen sind eigenständige, sofern sie nicht ausdrücklich eine andere Klasse erweitern. PHP unterscheidet sich von vielen objektorientierten Sprachen in dieser Hinsicht.
Sie können eine Klasse definieren, die stdClass erstreckt, aber Sie würden nicht bekommen profitieren, da stdClass tut nichts.
stdClass ist eine Art und Weise, in der die < a class = "post-Tag" href = "/ Fragen / getaggt / php" Titel "Show Fragen getaggt 'php'" rel = "tag" => php stoppen zu vermeiden das Skript zu interpretieren, wenn es einige Daten müssen in einer Klasse gestellt werden, aber leider wurde diese Klasse nicht definiert
Beispiel:
return $statement->fetchAll(PDO::FETCH_CLASS , 'Tasks');
Hier werden die Daten in den vordefinierten ‚Aufgaben‘ gesetzt werden. Aber wenn wir den Code wie dies tun:
return $statement->fetchAll(PDO::FETCH_CLASS );
dann die php getaggt Fragen die Ergebnisse stellen wird in stdClass .
php getaggt sagt, dass: schauen wir hat ein guten KIDS [Objekte] Hier aber ohne Eltern. So werden wir sie zu einem Säugling Pflegeheim stdClass :)
Sie können auch object
verwenden Arrays auf ein Objekt Ihrer Wahl zu werfen:
Class Example
{
public $name;
public $age;
}
Jetzt ein Objekt vom Typ Example
zu erstellen und zu initialisieren, können Sie entweder von diesen tun:
$example = new Example();
$example->name = "some name";
$example->age = 22;
oder
$example = new Example();
$example = (object) ['name' => "some name", 'age' => 22];
Die zweite Methode ist vor allem nützlich für Objekte mit vielen Eigenschaften zu initialisieren.
stClass eine leere Klasse ist von PHP selbst erstellt, und sollte nur von PHP verwendet werden, weil es nicht nur eine „leere“ Klasse, php verwendet stdClass Arrays konvertieren Stil zum Objekt wenn Sie verwenden stdClass benötigen, empfehle ich zwei bessere Möglichkeiten: 1- Verwendung Arrays (viel schneller als Klassen) 2- Ihre eigene leere Klasse machen und es verwenden,
//example 1
$data=array('k1'=>'v1' , 'k2'=>'v2',....);
//example 2
//creating an empty class is faster than instances an stdClass
class data={}
$data=new data();
$data->k1='v1';
$data->k2='v2';
, was jemand macht über die Verwendung des Objektstil anstelle von Array-Stil denken ???