95 votes

Comment ajouter une propriété à un objet en PHP >= 5.3 mode strict sans générer d'erreur

Cela doit être simple, mais je n'arrive pas à trouver de réponse.....

J'ai un objet générique stdClass $foo sans propriétés. Je veux ajouter une nouvelle propriété $bar qui n'est pas déjà définie. Si je fais ça :

$foo = new StdClass();
$foo->bar = '1234';

PHP en mode strict se plaint.

Quelle est la bonne façon (en dehors de la déclaration de classe) d'ajouter une propriété à un objet déjà instancié ?

NOTE : Je veux que la solution fonctionne avec l'objet PHP générique de type stdClass.

Un peu de contexte sur cette question. Je suis en train de décoder une chaîne json qui est un tableau d'objets json. json_decode() génère un tableau d'objets StdClass. Je dois manipuler ces objets et ajouter une propriété à chacun d'eux.

1voto

Ganga Points 11

Je ne sais pas si c'est la nouvelle version de php, mais cela fonctionne. J'utilise php 5.6

    <?php
    class Person
    {
       public $name;

       public function save()
       {
          print_r($this);
       }
    }

   $p = new Person;
   $p->name = "Ganga";
   $p->age = 23;

   $p->save();

Voici le résultat. La méthode de sauvegarde obtient en fait la nouvelle propriété

    Person Object
    (
       [name] => Ganga
       [age] => 23
    )

-8voto

AdiCumpanasu Points 152

Oui, il est possible d'ajouter dynamiquement des propriétés à un objet PHP.

Ceci est utile lorsqu'un objet partiel est reçu de javascript.

Côté JAVASCRIPT :

var myObject = { name = "myName" };
$.ajax({ type: "POST", url: "index.php",
    data: myObject, dataType: "json",
    contentType: "application/json;charset=utf-8"
}).success(function(datareceived){
    if(datareceived.id >= 0 ) { /* the id property has dynamically added on server side via PHP */ }
});

Côté PHP :

$requestString = file_get_contents('php://input');
$myObject = json_decode($requestString); // same object as was sent in the ajax call
$myObject->id = 30; // This will dynamicaly add the id property to the myObject object

OU ENVOYEZ UNE PROPRIÉTÉ DUMMY à partir de javascript que vous remplirez en PHP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X