Question Qu'est-ce que stdClass en PHP?


Veuillez définir ce que stdClass est.


907
2018-05-31 05:49


origine


Réponses:


stdClass est la classe vide générique de PHP, un peu comme Object en Java ou object en Python (Modifier: mais pas réellement utilisé comme classe de base universelle; Merci @Ciaran pour  le signaler).

Il est utile pour les objets anonymes, les propriétés dynamiques, etc.

Un moyen facile de considérer le StdClass est comme une alternative au tableau associatif. Voir cet exemple ci-dessous qui montre comment json_decode() permet d'obtenir une instance StdClass ou un tableau associatif. Aussi mais non montré dans cet exemple, SoapClient::__soapCall renvoie une instance 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

Voir Propriétés dynamiques en PHP et StdClass pour plus d'exemples.


677
2018-05-31 05:55



stdClass est juste une classe 'vide' générique utilisée pour la conversion d'autres types en objets. Malgré ce que disent les deux autres réponses, stdClass est ne pas la classe de base pour les objets en PHP. Cela peut être démontré assez facilement:

class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'

Je ne crois pas qu'il y ait un concept d'objet de base en PHP


1054
2018-06-14 11:13



stdClass est une autre excellente fonctionnalité PHP. Vous pouvez créer une classe PHP anonyme. Permet de vérifier un exemple.

$page=new stdClass();
$page->name='Home';
$page->status=1;

Maintenant, pensez que vous avez une autre classe qui va s'initialiser avec un objet page et exécuter une base dessus.

<?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';
    }
}

Vous devez maintenant créer un nouvel objet PageShow avec un objet Page.

Ici, pas besoin d'écrire un nouveau modèle de classe pour cela, vous pouvez simplement utiliser stdClass pour créer une classe à la volée.

    $pageview=new PageShow($page);
    $pageview->show();

80
2017-12-08 09:20



A noter également, un stdClass objet peut être créé à partir de l'utilisation de json_decode() ainsi que.


58
2017-10-11 19:11



Également,

$myNewObj->setNewVar = 'newVal'; 

génère un objet stdClass - casté automatiquement

Je l'ai trouvé aujourd'hui par faute d'orthographe:

$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';

Cool!


24
2018-05-19 13:47



En utilisant stdClass vous pouvez créer un nouvel objet avec ses propres propriétés. Considérez l'exemple suivant qui représente les détails d'un utilisateur en tant que tableau associatif.

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

Si vous devez représenter les mêmes détails que les propriétés d'un objet, vous pouvez utiliser stdClass comme ci-dessous.

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

Si vous êtes un développeur Joomla, référez-vous cet exemple dans les docs Joomla pour mieux comprendre.


20
2018-04-06 14:21



En fait, j'ai essayé de créer stdClass vide et j'ai comparé la vitesse à la classe vide.

class emp{}

puis procédé à la création de 1000 stdClasses et emps ... les classes vides ont été faites en environ 1100 microsecondes tandis que stdClasses a pris plus de 1700 microsecondes. Donc je suppose qu'il est préférable de créer votre propre classe fictive pour stocker des données si vous voulez utiliser des objets pour cela (les tableaux sont beaucoup plus rapides pour l'écriture et la lecture).


7
2018-03-23 15:02



stdClass n'est pas une classe anonyme ou un objet anonyme

Les réponses ici incluent des expressions stdClass est une classe anonyme ou même un objet anonyme. Ce n'est pas vrai.

stdClass est juste une classe prédéfinie régulière. Vous pouvez vérifier cela en utilisant instanceof opérateur ou fonction get_class. Rien de spécial ne va ici. PHP utilise cette classe lors de la conversion d'autres valeurs en objet.

Dans de nombreux cas où stdClass est utilisé par les programmeurs le tableau est une meilleure option, en raison des fonctions utiles et du fait que cette usecase représente la structure de données pas un objet réel.


6
2018-03-05 10:04



Si vous souhaitez créer rapidement un nouvel objet pour stocker des données sur un livre. Vous feriez quelque chose comme ceci:

$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://rads.stackoverflow.com/amzn/click/0439136369";

S'il vous plaît vérifier le site - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ pour plus de détails.


3
2017-10-14 10:02



Le manuel de php.net a quelques explications solides et des exemples fournis par les utilisateurs de ce que stdClass est, j'aime particulièrement celui-ci http://php.net/manual/en/language.oop5.basic.php#92123, https://stackoverflow.com/a/1434375/2352773.

stdClass est l'objet PHP par défaut. stdClass n'a pas de propriétés,   méthodes ou parent. Il ne supporte pas les méthodes magiques, et implémente   pas d'interfaces.

Lorsque vous créez un scalaire ou un tableau en tant qu'objet, vous obtenez une instance de   stdClass. Vous pouvez utiliser stdClass chaque fois que vous avez besoin d'un objet générique   exemple.

stdClass n'est PAS une classe de base! Les classes PHP n'héritent pas automatiquement   de n'importe quelle classe. Toutes les classes sont autonomes, sauf si elles sont explicitement   étendre une autre classe. PHP diffère de nombreux langages orientés objet   à cet égard.

Vous pouvez définir une classe qui étend stdClass, mais vous obtiendrez pas   avantage, car stdClass ne fait rien.


2
2018-06-19 14:42