Domanda

Si prega di definire che cosa stdClass è.

È stato utile?

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.

è un modo in cui il 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 metterà i risultati in .

semplicemente dice che :guarda , abbiamo una buona BAMBINI[Oggetti] Qui, ma senza i Genitori .Così , li inviano a un bambino neonato di Casa di Cura :)

È 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 ???

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top