Comme nous le savons, créer des objets anonymes en JavaScript est facile, comme le code ci-dessous:
var object = {
p : "value",
p1 : [ "john", "johnny" ]
};
alert(object.p1[1]);
Production:
an alert is raised with value "johnny"
Cette même technique peut-elle être appliquée en PHP? Peut-on créer des objets anonymes en PHP?
Réponses:
Cela fait quelques années, mais je pense que je dois garder les informations à jour!
Depuis PHP 7, il est possible de créer des classes anonymes, vous pouvez donc faire des choses comme ceci:
Vous pouvez en savoir plus à ce sujet dans le manuel
Mais je ne sais pas à quel point il est implémenté avec JavaScript, il peut donc y avoir quelques différences entre les classes anonymes en JavaScript et PHP.
la source
"Anonyme" n'est pas la bonne terminologie pour parler d'objets. Il vaudrait mieux dire "objet de type anonyme ", mais cela ne s'applique pas à PHP.
Tous les objets en PHP ont une classe. La classe "par défaut" est
stdClass
, et vous pouvez en créer des objets de cette façon:Vous pouvez également tirer parti de la conversion d'un tableau en objet pour une syntaxe plus pratique:
Cependant, sachez que la conversion d'un tableau en objet est susceptible de donner des résultats "intéressants" pour ces clés de tableau qui ne sont pas des noms de variables PHP valides - par exemple, voici une de mes réponses qui montre ce qui se passe lorsque les clés commencent par des chiffres.
la source
Oui c'est possible! Utilisation de cette simple classe d' objet anonyme PHP . Comment ça fonctionne:
Bien sûr, cet objet est une instance de
AnObj
classe, il n'est donc pas vraiment anonyme, mais il permet de définir des méthodes à la volée, comme le fait JavaScript.la source
Jusqu'à récemment, c'est ainsi que je créais des objets à la volée.
Ensuite:
Mais maintenant je vais avec:
Puis comme avant:
Bien sûr, si vous connaissez déjà les propriétés et les valeurs, vous pouvez les définir à l'intérieur comme cela a été mentionné:
NB: Je ne sais pas sur quelles versions de PHP cela fonctionne, vous devez donc en être conscient. Mais je pense que la première approche (qui est également courte s'il n'y a pas de propriétés à définir lors de la construction) devrait fonctionner pour toutes les versions qui ont json_encode / json_decode
la source
Convertir le tableau en objet (mais ce n'est pas récursif pour les sous-enfants):
la source
Si vous souhaitez imiter JavaScript, vous pouvez créer une classe
Object
, et ainsi obtenir le même comportement. Bien sûr, ce n'est plus tout à fait anonyme, mais cela fonctionnera.Cela produira l' élément 2 . Cela a été volé à un commentaire sur PHP: Classes and Objects .
la source
La prise en charge des classes anonymes est disponible depuis PHP 7.0 et est l'analogue le plus proche de l'exemple JavaScript fourni dans la question.
La déclaration de visibilité sur les propriétés ne peut pas être omise (je viens de l'utiliser
var
car elle est plus courte quepublic
).Comme JavaScript, vous pouvez également définir des méthodes pour la classe:
la source
De la documentation PHP, quelques autres exemples:
$ obj1 et $ obj3 sont du même type, mais $ obj1! == $ obj3. De plus, tous les trois json_encode () en un simple objet JS {}:
Les sorties:
https://www.php.net/manual/en/language.types.object.php
la source
Si vous souhaitez créer un objet (comme en javascript) avec des propriétés dynamiques, sans recevoir d'avertissement de propriété indéfinie, lorsque vous n'avez pas défini de valeur sur propriété
la source
Non - car javascript utilise des prototypes / déclaration directe d'objets - en PHP (et dans de nombreux autres langages OO), un objet ne peut être créé qu'à partir d'une classe.
La question devient donc - pouvez-vous créer une classe anonyme.
Encore une fois, la réponse est non - comment instancieriez-vous la classe sans pouvoir la référencer?
la source
Object var = new Object() { ... };
- C ++:class { ... } var;
Pour celui qui veut un objet récursif:
la source
Anoynmus objet wiki
la source