Domanda
Si prega di definire che cosa stdClass
è.
Soluzione
stdClass
è classe vuota generica di PHP, un po 'come Object
in Java o object
in Python ( Modifica , ma non effettivamente utilizzate come classe di base universale, grazie @Ciaran per precisazione ).
E 'utile per gli oggetti anonimi, proprietà dinamiche, ecc
Un modo semplice per considerare lo stdClass è come alternativa alla array associativo. Vedi questo esempio seguente che mostra come json_decode()
permette di ottenere un'istanza stdClass o un array associativo.
Anche, ma non mostrato in questo esempio, SoapClient::__soapCall
restituisce un'istanza stdClass.
<?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
Proprietà dinamiche in PHP e stdClass per ulteriori esempi.
Altri suggerimenti
stdClass
è solo una classe generica 'vuoto' che viene utilizzato in fase di lancio di altri tipi di oggetti. Nonostante ciò che dicono gli altri due risposte, stdClass
è non la classe base per gli oggetti in PHP. Questo può essere dimostrato abbastanza facilmente:
class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'
Non credo ci sia un concetto di un oggetto di base in PHP
stdClass è un altro grande caratteristica di PHP. È possibile creare una classe PHP anonima. Consente di controllare un esempio.
$page=new stdClass();
$page->name='Home';
$page->status=1;
Ora pensate di avere una un'altra classe che si inizializza con un oggetto di pagina e l'esecuzione di base su di esso.
<?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';
}
}
Ora è necessario creare un nuovo oggetto PageShow con una pagina oggetto.
Qui non c'è bisogno di scrivere un nuovo modello di classe per questo si può semplicemente utilizzare stdClass per creare una classe al volo.
$pageview=new PageShow($page);
$pageview->show();
Anche la pena notare, un oggetto stdClass
può essere creata dall'uso di json_decode()
pure.
Utilizzando stdClass è possibile creare un nuovo oggetto con le proprie proprietà. Si consideri il seguente esempio che rappresenta i dettagli di un utente come un array associativo.
$array_user = array();
$array_user["name"] = "smith john";
$array_user["username"] = "smith";
$array_user["id"] = "1002";
$array_user["email"] = "smith@nomail.com";
Se avete bisogno di rappresentare gli stessi dettagli come le proprietà di un oggetto, è possibile utilizzare stdClass , come di seguito.
$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "smith@nomail.com";
Se sei uno sviluppatore Joomla riferimento questo esempio nella documentazione Joomla per una maggiore comprensione.
Allo stesso modo,
$myNewObj->setNewVar = 'newVal';
produce un oggetto stdClass - auto pressofuso
Ho trovato questo oggi da errore di ortografia:
$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';
Cool!
stdClass non è una classe anonima o oggetto anonimo
Le risposte qui include espressioni che stdClass
è una classe anonima o addirittura oggetto anonimo. Non è una vera e propria.
stdClass
è solo una classe predefinita regolare. È possibile controllare questo usando operatore instanceof
o la funzione get_class
. Niente di speciale va qui. PHP utilizza questa classe in fase di lancio altri valori di opporsi.
In molti casi in cui stdClass
viene utilizzato dai programmatori matrice è scelta migliore, a causa delle funzioni e il fatto che questo usecase rappresenta la struttura di dati non è un oggetto reale.
In realtà ho provato a generare vuoto stdClass e rispetto alla velocità di classe vuota.
class emp{}
poi proceduto creazione 1000 stdClasses e emps ... classi vuote sono state fatte in circa 1100 microsecondi mentre stdClasses ha assunto 1700 microsecondi. Quindi credo che il suo meglio per creare la propria classe fittizia per la memorizzazione dei dati, se si desidera utilizzare oggetti per che così male (gli array sono molto più veloce sia per la scrittura e la lettura).
oggetti stdClass in uso
Lo stdClass consente di creare classi anonime e con oggetto la fusione è anche possibile accedere alle chiavi di un array associativo in stile OOP. Proprio come si dovrebbe accedere alla proprietà oggetto regolare.
Esempio
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"]);
sarà eco
John Doe
La sua anche la pena notare che utilizzando Casting in realtà non c'è bisogno di creare un oggetto, come nella risposta data dal @Bandula. Invece si può semplicemente lanciare l'array a un oggetto e lo stdClass viene restituito. Ad esempio:
$array = array(
'Property1'=>'hello',
'Property2'=>'world',
'Property3'=>'again',
);
$obj = (object) $array;
echo $obj->Property3;
Output: again
Se si voleva creare rapidamente un nuovo oggetto per contenere alcuni dati su un libro. Si potrebbe fare qualcosa di simile:
$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/";
Si prega di controllare il sito - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ per maggiori dettagli.
Si prega di tenere presente che 2 stdClasses vuoti non sono strettamente uguali. Questo è molto importante quando si scrive aspettative scherno.
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 manuale ha una spiegazione solida pochi e esempi contribuito dagli utenti di ciò che è stdClass, mi piace soprattutto questo http://php.net/manual/en/language.oop5.basic.php#92123 , https://stackoverflow.com/a/1434375/2352773 .
stdClass è l'oggetto di default di PHP. stdClass non ha proprietà, metodi o genitore. Non supporta i metodi di magia, e strumenti nessuna interfaccia.
Quando lanci uno scalare o un array come oggetto, si ottiene un'istanza di stdClass. È possibile utilizzare stdClass ogni volta che avete bisogno di un oggetto generico esempio.
stdClass non è una classe di base! classi PHP non ereditano automaticamente da qualsiasi classe. Tutte le classi sono standalone, a meno che non esplicitamente estendere un'altra classe. PHP differenzia da molti linguaggi orientati agli oggetti a questo riguardo.
Si potrebbe definire una classe che estende stdClass, ma si otterrebbe alcun beneficiare, come stdClass non fa nulla.
stdclass è un modo in cui il php evitare di fermarsi interpretare lo script quando ci sono dei dati deve essere messo in una classe , ma purtroppo questa classe non è stata definita
Esempio :
return $statement->fetchAll(PDO::FETCH_CLASS , 'Tasks');
Qui i dati verranno inseriti nel predefiniti "Compiti".Ma, se abbiamo fatto il codice come questo :
return $statement->fetchAll(PDO::FETCH_CLASS );
quindi il php metterà i risultati in stdclass .
semplicemente php dice che :guarda , abbiamo una buona BAMBINI[Oggetti] Qui, ma senza i Genitori .Così , li inviano a un bambino neonato di Casa di Cura stdclass :)
È inoltre possibile utilizzare object
per lanciare array per un oggetto di vostra scelta:
Class Example
{
public $name;
public $age;
}
Ora per creare un oggetto di tipo Example
e inizializzare si può fare uno di questi:
$example = new Example();
$example->name = "some name";
$example->age = 22;
o
$example = new Example();
$example = (object) ['name' => "some name", 'age' => 22];
Il secondo metodo è particolarmente utile per inizializzare oggetti con molte proprietà.
stClass è una classe vuoto creato da PHP stesso, e deve essere utilizzato solo da php, perché non è solo una classe di "vuoto", php utilizza stdClass per convertire gli array a oggetto di stile se avete bisogno di usare stdClass, vi consiglio due opzioni migliori: 1- array uso (molto più velocemente di classi) 2- rendere la propria classe vuota e lo usano
//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';
ciò che rende qualcuno a pensare di utilizzare lo stile oggetto invece di stile serie ???