Question

S'il vous plaît définir ce stdClass est.

Était-ce utile?

La solution

stdClass est classe générique vide de PHP, un peu comme Object en Java ou object en Python ( Modifier , mais pas vraiment utilisé comme classe de base universelle; merci @Ciaran pour avoir signalé ).

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

Un moyen facile de considérer la StdClass est comme 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 ne figure 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.

Autres conseils

stdClass est juste une classe « vide » générique qui est utilisé lors de la coulée d'autres types d'objets. Malgré ce que les deux autres réponses disent, stdClass 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 y ait un concept d'un objet de base en PHP

stdClass est une autre grande caractéristique 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;

pense maintenant que vous avez une autre classe qui initialise avec un objet et d'exécuter la base de la page il.

<?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 de 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();

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

Utilisation 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 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 développeur Joomla consultez cet exemple dans la documentation Joomla pour une meilleure compréhension.

De même,

$myNewObj->setNewVar = 'newVal'; 

donne un objet stdClass - auto casted

J'ai trouvé aujourd'hui par faute d'orthographe:

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

Cool!

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

Réponses ici comprend des expressions qui stdClass est une classe anonyme ou même objet anonyme. Ce n'est pas vrai.

stdClass est juste une classe prédéfinie régulière. Vous pouvez le vérifier à l'aide de l'opérateur ou la fonction instanceof get_class. Rien ne va spécial ici. PHP utilise cette classe lors de la coulée d'autres valeurs à l'objet.

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

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

class emp{}

ont ensuite la création de 1000 stdClasses et emps ... cours vides ont été faites dans environ 1100 microsecondes en stdClasses ont plus de 1700 microsecondes. Donc je suppose que son mieux pour créer votre propre classe factice pour stocker des données si vous souhaitez utiliser des objets pour ce si mal (tableaux sont beaucoup plus rapides pour l'écriture et la lecture).

objets stdClass utilisés

Le stdClass vous permet de créer des classes anonymes et avec un objet casting, vous pouvez également accéder aux clés d'un tableau associatif dans le style POO. Tout comme vous accéder à la propriété régulière d'objets.

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

Il est également intéressant de noter que l'utilisation de 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 jeter votre tableau à 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

Si vous voulez créer rapidement un nouvel objet pour contenir des données d'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/";

S'il vous plaît consulter le site - http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/ pour plus de détails.

S'il vous plaît garder à l'esprit que 2 stdClasses vides ne sont pas strictement égales. Ceci est très important lors de l'écriture des attentes de moquerie.

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 >

php.net manuel a quelques explications solides et des exemples apportés par les utilisateurs de ce stdClass est, je en particulier comme 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,   les méthodes et la mère. Il ne supporte pas les méthodes magiques et outils   aucune interface.

     

Quand vous lancez un scalaire ou un tableau comme objet, vous obtenez une instance de   stdClass. Vous pouvez utiliser stdClass chaque fois que vous avez besoin d'un objet générique   par exemple.

     

stdClass n'est pas une classe de base! les classes PHP ne héritent pas automatiquement   de toute classe. Toutes les classes sont autonomes, à moins explicitement   étendre une autre classe. PHP diffère de beaucoup de langages orientés objet   à cet égard.

     

Vous pouvez définir une classe qui étend stdClass, mais vous obtenez pas   bénéficier, comme stdClass ne fait rien.

est une façon dont le < une classe = "post-tag" href = "/ questions / tagged / php" title = "Afficher les questions tagged 'php'" rel = "tag"> php éviter l'arrêt de l'interprétation du script quand il y a des données doit être mis dans une classe, mais malheureusement cette classe n'a pas été défini

Exemple:

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

Ici, les données seront mises dans les « Tâches » prédéfinies. Mais, si nous avons le code comme ceci:

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

va mettre les résultats en .

dit: regardez, nous avoir une bonne KIDS [Objets] ici, mais sans parents. Donc, nous allons les envoyer à un enfant en bas âge de soins à domicile :)

Vous pouvez également utiliser object pour lancer des tableaux à un objet de votre choix:

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

pour créer un objet de type Example et pour l'initialiser, vous pouvez faire l'une de ces:

$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éé par PHP lui-même, et doit être utilisé par php uniquement, car il est non seulement une classe « vide », php utilise stdClass pour convertir des tableaux au style-objets si vous avez besoin d'utiliser stdClass, je vous recommande deux meilleures options:  1- tableaux d'utilisation (beaucoup plus vite que les classes)  2- Faites 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';

ce qui fait penser à quelqu'un en utilisant le style d'objet au lieu du style de tableau ???

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top