web-dev-qa-db-fra.com

Qu'est-ce que stdClass en PHP?

Veuillez définir ce que stdClass est.

995
Keira Nighly

stdClass est la classe vide générique de PHP, un peu comme Object dans Java ou object dans Python ( Edit: mais pas réellement utilisé en tant que classe de base universelle; merci @ Ciaran pour signalant ceci ).

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

Un moyen facile d’envisager le StdClass est 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. De plus, mais non indiqué 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 dans PHP et StdClass pour plus d'exemples.

744
Alex Martelli

stdClass est simplement une classe générique 'vide' utilisée lors de la conversion d'autres types en objets. Malgré ce que disent les deux autres réponses, stdClass est pas la classe de base des 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 existe un concept d'objet de base en PHP

1091
Ciaran McNulty

stdClass est une autre grande 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 initialisera avec un objet de page et exécutera la 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, plus 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();
90
Mrinmoy Ghoshal

Il convient également de noter qu'un objet stdClass peut également être créé à partir de l'utilisation de json_decode().

59
mdpatrick

En utilisant stdClass , vous pouvez créer un nouvel objet avec ses propres propriétés. Prenons l'exemple suivant qui représente les détails d'un utilisateur sous la forme d'un tableau associatif.

$array_user = array();
$array_user["name"] = "smith john";
$array_user["username"] = "smith";
$array_user["id"] = "1002";
$array_user["email"] = "[email protected]";

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

$obj_user = new stdClass;
$obj_user->name = "smith john";
$obj_user->username = "smith";
$obj_user->id = "1002";
$obj_user->email = "[email protected]";

Si vous êtes un développeur Joomla, reportez-vous à cet exemple dans la documentation Joomla pour davantage de compréhension.

25

Également,

$myNewObj->setNewVar = 'newVal'; 

donne un objet stdClass - cast automatique

J'ai découvert cela aujourd'hui en mal orthographiant:

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

Cool!

24

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

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

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

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

11
John Smith

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

class emp{}

a ensuite procédé à la création de 1000 stdClasses et emps ... des classes vides ont été effectuées 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 si mal (les tableaux sont beaucoup plus rapides en écriture et en lecture).

7
Sage

Il est également intéressant de noter qu’en utilisant Casting, il n’est pas nécessaire de créer un objet comme dans la réponse donnée par @Bandula. Au lieu de cela, vous pouvez simplement convertir votre tableau en objet et la classe stdClass est renvoyée. Par exemple:

$array = array(
    'Property1'=>'hello',
    'Property2'=>'world',
    'Property3'=>'again',
);

$obj = (object) $array;
echo $obj->Property3;

Output: again

5
Antony

objets stdClass utilisés

La classe stdClass vous permet de créer des classes anonymes. Avec la transposition d’objets, vous pouvez également accéder aux clés d’un tableau associatif dans le style OOP. Tout comme vous accéderiez à la propriété d'objet standard.

Exemple

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"]);

fera écho

John Doe

5
DevWL

Si vous voulez créer rapidement un nouvel objet contenant des données sur un livre. Vous feriez quelque chose comme ça:

$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/";

Veuillez consulter le site - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ pour plus de détails.

Gardez à l'esprit que 2 classes std vides vides ne sont pas strictement égales. Ceci est très important lorsque vous écrivez des attentes moqueuses.

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 >
4
jakub wrona

stdclass est une façon pour le php d'éviter d'interrompre l'interprétation du script lorsqu'il y a des données dans une classe, mais malheureusement cette classe n'a pas été définie

Exemple :

 return $statement->fetchAll(PDO::FETCH_CLASS  , 'Tasks');

Ici, les données seront placées dans les "tâches" prédéfinies. Mais si nous avons fait le code comme ceci:

 return $statement->fetchAll(PDO::FETCH_CLASS );

alors le php mettra les résultats dans stdclass .

simplement php dit que: regardez, nous avons un bon enfant [Objets] ici mais sans parents. Nous allons donc les envoyer dans une maison de retraite pour nourrissons stdclass :)

3
Nasir Nasrallah

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/fr/language.oop5.basic.php#9212 , https://stackoverflow.com/a/1434375/235277 .

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 n'implémente aucune interface.

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

stdClass n'est pas une classe de base! Les classes PHP n'héritent automatiquement d'aucune classe. Toutes les classes sont autonomes, sauf si elles étendent explicitement 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 n’obtiendrez aucun avantage, stdClass ne faisant rien.

3
Danijel

stClass est une classe vide créée par php elle-même, et ne devrait être utilisée que par php, car il ne s'agit pas simplement d'une classe "vide", php utilise stdClass pour convertir les tableaux en style d'objet si vous devez utiliser stdClass. Je recommande deux meilleures options. : 1- utiliser des tableaux (beaucoup plus rapides que les classes) 2- créer votre propre classe vide et l'utiliser

//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';

qu'est-ce qui fait que quelqu'un pense à utiliser le style d'objet au lieu du style de tableau ???

1
Sherif Eldeeb

Vous pouvez également utiliser object pour convertir des tableaux en un objet de votre choix:

Class Example
{
   public $name;
   public $age;
}

Maintenant, pour créer un objet de type Example et l’initialiser, vous pouvez effectuer l’une des opérations suivantes:

$example = new Example();
$example->name = "some name";
$example->age = 22;

OR

$example = new Example();
$example = (object) ['name' => "some name", 'age' => 22];

La seconde méthode est surtout utile pour initialiser des objets avec de nombreuses propriétés.

1
Vahid Amiri