Qu'est-ce que stdClass en PHP?
16 réponses
stdClass
est la classe générique vide de PHP, un peu comme Object
en Java ou object
en Python ( Edit: mais pas réellement utilisé comme classe de base universelle; merci @Ciaran pour pointant ceci ).
il est utile pour les objets anonymes, propriétés dynamiques, etc.
une façon facile de considérer la StdClass est comme une alternative au tableau associatif. Voir cet exemple ci-dessous montre comment json_decode()
permet d'obtenir une instance StdClass ou un tableau associatif.
Aussi mais pas 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.
stdClass
est juste une classe générique "vide" qui est utilisée lors de la fonte d'autres types à des objets. Malgré ce que disent les deux autres réponses, stdClass
est et non 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 a un concept d'un objet de base dans PHP
stdClass est une autre grande fonctionnalité de 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 page et exécutera base sur elle.
<?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';
}
}
Maintenant vous devez 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 sur l' voler.
$pageview=new PageShow($page);
$pageview->show();
un objet stdClass
peut également être créé à partir de l'utilisation de json_decode()
.
de même,
$myNewObj->setNewVar = 'newVal';
génère un objet stdClass - auto coulé
j'ai découvert ceci aujourd'hui en écrivant mal:
$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';
Cool!
en utilisant stdClass vous pouvez créer un nouvel objet avec ses propres propriétés. Prenons l'exemple suivant représente les détails d'un utilisateur comme un 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 avez besoin de 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 Joomla développeur référez-vous à cet exemple dans le Joomla docs pour plus de compréhension.
en fait j'ai essayé de créer la classe stdClass vide et j'ai comparé la vitesse à la classe vide.
class emp{}
a ensuite procédé à la création de 1000 classes STD et emps... les classes vides ont été effectuées en environ 1100 microsecondes, tandis que les classes STD prenaient plus de 1700 microsecondes. Donc je suppose qu'il est préférable de créer votre propre classe de mannequin pour stocker des données si vous voulez utiliser des objets pour cela si mal (les tableaux sont beaucoup plus rapides pour l'écriture et la lecture).
stdClass n'est pas une classe anonyme ou objet anonyme
répond ici inclut des expressions que stdClass
est une classe anonyme ou même un objet anonyme. Ce n'est pas un vrai.
stdClass
est juste une classe régulière prédéfinie. Vous pouvez vérifier cela en utilisant instanceof
l'opérateur ou la fonction get_class
. Rien de spécial ici. PHP utilise cette classe pour lancer d'autres valeurs pour objecter.
Dans de nombreux cas où stdClass
est utilisé par les programmeurs le tableau est meilleure option, en raison de fonctions utiles et le fait que cette usecase représente la structure de données pas un objet réel.
si vous voulez créer rapidement un nouvel objet pour contenir 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";
Merci de vérifier le site http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ pour plus de détails.
stdClass objets en cours d'utilisation
la classe stdClass vous permet de créer des classes anonymes et avec object casting, vous pouvez également accéder aux clés d'un tableau associatif dans le style OOP. Tout comme vous accéderiez à la propriété regular object.
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"]);
echo
John Doe
php.net manuel 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 d'un parent. Il ne supporte pas les méthodes magiques, et met en œuvre pas d'interfaces.
Quand vous lancez un scalaire ou un tableau d'Objet, vous obtenez une instance de stdClass. Vous pouvez utiliser stdClass chaque fois que vous avez besoin d'un objet générique instance.
stdClass n'est pas une classe de base! Les classes PHP n'héritent pas automatiquement de toute la 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 s'étend stdClass, mais vous obtenez pas de bénéfice, car stdClass ne fait rien.
il est aussi intéressant de noter qu'en utilisant le Casting vous n'avez pas besoin de créer un objet comme dans la réponse donnée par @Bandula. Au lieu de cela, vous pouvez simplement lancer votre tableau vers un objet et le stdClass est retourné. Par exemple:
$array = array(
'Property1'=>'hello',
'Property2'=>'world',
'Property3'=>'again',
);
$obj = (object) $array;
echo $obj->Property3;
Output: again
stClass est une classe vide créée par php lui-même , et devrait être utilisé par php seulement, parce que ce n'est pas juste une classe "vide" , php utilise stdClass pour convertir les tableaux en style objet si vous avez besoin d'utiliser stdClass , je recommande deux meilleures options : 1-utiliser des tableaux (beaucoup plus rapide que les classes) 2-Faites votre propre classe vide et utilisez-la
//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 incite quelqu'un à penser à utiliser le style objet au lieu du style tableau???
stdclass est une façon dont le php éviter d'arrêter d'interpréter le script quand il ya des données doivent être mis 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 );
puis le php mettra le résultats dans stdclass .
simplement php dit que: Regardez , nous avons de bons enfants[Objets] ici, mais sans Parents . Donc, nous allons les envoyer à une garderie D'enfants en bas âge stdclass :)
s'il vous Plaît garder à l'esprit qu'2 vide stdClasses ne sont pas strictement égales. C'est très important quand on écrit 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 >
vous pouvez également utiliser object
pour lancer des tableaux vers un objet de votre choix:
Class Example
{
public $name;
public $age;
}
maintenant pour créer un objet de type Example
et pour l'initialiser vous pouvez faire l'un ou l'autre de ces:
$example = new Example();
$example->name = "some name";
$example->age = 22;
ou
$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.