Veuillez définir ce que stdClass
est.
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.
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
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();
Il convient également de noter qu'un objet stdClass
peut également être créé à partir de l'utilisation de json_decode()
.
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.
É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!
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.
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).
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
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.
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
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 >
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 :)
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.
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 ???
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.