Qu'est-ce que stdClass en PHP?

veuillez définir ce qu'est stdClass .

923
demandé sur random 2009-05-31 09:49:01

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.

689
répondu Alex Martelli 2018-02-01 14:56:50

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

1062
répondu Ciaran McNulty 2015-06-26 10:17:50

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();
80
répondu Mrinmoy Ghoshal 2016-02-19 16:31:53

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

58
répondu mdpatrick 2015-12-02 14:04:38

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!

24
répondu Codename-Steeve-Knight 2010-05-19 13:52:15

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.

21
répondu Bandula Dharmadasa 2015-07-13 09:57:54

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).

7
répondu Sage 2013-03-23 15:02:33

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.

6
répondu John Smith 2017-11-13 07:54:37

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.

3
répondu Niladri Banerjee - Uttarpara 2015-10-14 10:02:57

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

3
répondu DevWL 2018-01-08 17:31:51

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.

2
répondu Danijel 2017-05-23 12:34:59

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

2
répondu Antony 2018-01-11 11:35:34

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???

1
répondu Sherif Eldeeb 2017-08-11 21:34:23

est une façon dont le é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 mettra le résultats dans .

simplement 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 :)

1
répondu Nasir Nasrallah 2017-09-29 12:38:49

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 >
1
répondu jakub wrona 2018-03-13 10:48:21

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.

0
répondu Vahid Amiri 2016-01-28 07:35:13