Veuillez définir ce qui stdClass
est.
Veuillez définir ce qui stdClass
est.
Réponses:
stdClass
est la classe vide générique de PHP, un peu comme Object
en Java ou object
en Python ( Edit: mais pas réellement utilisée comme classe de base universelle; merci @Ciaran pour l' avoir signalé ).
Il est utile pour les objets anonymes, les propriétés dynamiques, etc.
Un moyen simple de considérer la 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. En outre, mais non illustré dans cet exemple, SoapClient::__soapCall
retourne 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.
{}
construction de JavaScript .
function(StdClass $a, array $params)
vs vérifier si $a
is object et instanceof
.
stdClass
est juste une classe générique «vide» qui est utilisée lors de la conversion d'autres types en objets. Malgré ce que disent les deux autres réponses, ce stdClass
n'est 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 existe un concept d'un 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;
pensez maintenant que vous avez une autre classe qui va s'initialiser avec un objet page et exécuter 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, 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();
stdClass
.
Il convient également de noter qu'un stdClass
objet peut également être créé à partir de l'utilisation de json_decode()
.
True
. Les booléens sont en minuscules true
ou false
.
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 forme de 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, reportez - vous à cet exemple dans les documents Joomla pour une meilleure compréhension.
Également,
$myNewObj->setNewVar = 'newVal';
renvoie un objet stdClass - casté automatiquement
J'ai découvert cela aujourd'hui par une faute d'orthographe:
$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';
Cool!
Les réponses incluent ici des expressions qui stdClass
sont 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 le vérifier en utilisant l' instanceof
opérateur ou la 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 ce cas d'utilisation représente la structure de données et non un véritable objet.
Il est également intéressant de noter qu'en utilisant Casting, vous n'avez pas réellement besoin 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 un objet et la classe std est retournée. Par exemple:
$array = array(
'Property1'=>'hello',
'Property2'=>'world',
'Property3'=>'again',
);
$obj = (object) $array;
echo $obj->Property3;
Output: again
En fait, j'ai essayé de créer une classe std vide et j'ai comparé la vitesse à une classe vide.
class emp{}
puis a continué à créer 1000 stdClasses et emps ... les classes vides ont été effectuées en environ 1100 microsecondes tandis que les stdClasses ont pris plus de 1700 microsecondes. Donc je suppose que c'est mieux de créer votre propre classe factice pour stocker des données si vous voulez si mal utiliser des objets pour cela (les tableaux sont beaucoup plus rapides pour l'écriture et la lecture).
La stdClass vous permet de créer des classes anonymes et avec la conversion d'objets, vous pouvez également accéder aux clés d'un tableau associatif dans le style POO. 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 vouliez 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://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.
Veuillez garder à l'esprit que 2 stdClasses vides ne sont pas strictement égales. Ceci est très important lors de la rédaction 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 >
Le manuel de php.net contient quelques explications et exemples solides fournis par les utilisateurs de ce qu'est stdClass, 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, de méthodes ou de parent. Il ne prend pas en charge 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 pas 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'en tirerez aucun avantage, car stdClass ne fait rien.
stdclass est une manière dont le php éviter d'arrêter d'interpréter le script quand il y a des données doivent être mises 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 faisions le code comme ceci:
return $statement->fetchAll(PDO::FETCH_CLASS );
puis le php mettra les résultats dans stdclass .
simplement phpdit que: regardez, nous avons un bon KIDS [Objets] Ici mais sans Parents. Donc, nous les enverrons dans une garderie pour nourrissonsstdclass :)
Vous pouvez également utiliser object
pour lancer des tableaux sur 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;
OU
$example = new Example();
$example = (object) ['name' => "some name", 'age' => 22];
La deuxième méthode est surtout utile pour initialiser des objets avec de nombreuses propriétés.
stClass est une classe vide créée par php lui-même, et ne doit être utilisée que par php, car ce n'est pas seulement une classe "vide", php utilise stdClass pour convertir les tableaux en style 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 pousse quelqu'un à penser à utiliser le style d'objet au lieu du style de tableau ???
La raison pour laquelle nous avons stdClass est parce qu'en PHP il n'y a aucun moyen de distinguer un tableau normal d'un tableau associé (comme en Javascript vous avez {}
pour objet et []
pour tableau de les distinguer).
Cela crée donc un problème pour les objets vides. Prenez cela par exemple.
PHP:
$a = [1, 2, 3]; // this is an array
$b = ['one' => 1, 'two' => 2]; // this is an associate array (aka hash)
$c = ['a' => $a, 'b' => $b]; // this is also an associate array (aka hash)
Supposons que vous souhaitiez coder JSON la variable $ c
echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': {one: 1, two: 2}}
Supposons maintenant que vous ayez supprimé toutes les clés pour les $b
rendre vides. Comme il $b
est maintenant vide (vous avez supprimé toutes les clés, vous vous en souvenez?), Il ressemble à []
ce qui peut être un tableau ou un objet si vous le regardez.
Donc, si vous refaites un json_encode, la sortie sera différente
echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': []}
C'est un problème car nous savons b
qu'il était censé être un tableau associé, mais PHP (ou toute fonction comme json_encode) ne le fait pas.
Alors stdClass vient à la rescousse. Reprenant le même exemple
$a = [1, 2, 3]; // this is an array
$b = (object) ['one' => 1, 'two' => 2]; // this makes it an stdClass
$c = ['a' => $a, 'b' => $b]; // this is also an associate array (aka hash)
Alors maintenant, même si vous supprimez toutes les clés $b
et les videz, car il s'agit d'une classe std, cela n'aura pas d'importance et lorsque vous le json_encode vous obtiendrez ceci:
echo json_encode($c);
// outputs => {'a': [1,2,3], 'b': {}}
C'est aussi la raison pour laquelle json_encode
et json_decode
par défaut retourne stdClass.
$c = json_decode('{"a": [1,2,3], "b": {}}', true); //true to deocde as array
// $c is now ['a' => [1,2,3], 'b' => []] in PHP
// if you json_encode($c) again your data is now corrupted