Frage

Bitte definieren, welche stdClass ist.

War es hilfreich?

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.

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 die Ergebnisse stellen wird in .

sagt, dass: schauen wir hat ein guten KIDS [Objekte] Hier aber ohne Eltern. So werden wir sie zu einem Säugling Pflegeheim :)

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top