La création d'objets anonymes en php
Comme nous le savons, la création d'objets anonymes en JavaScript est facile, comme le code ci-dessous:
var object = {
p : "value",
p1 : [ "john", "johnny" ] } ;
alert(object.p1[1]) ;
De sortie:
an alert is raised with value "johnny"
Cette même technique sera appliquée en cas de PHP? Pouvons-nous créer des objets anonymes en PHP?
- Note: c'est une vieille question, de sorte que l'on a accepté la réponse est out-of-date. Cette fonction demande a été ajouté en PHP 7. Voir la réponse ci-dessous par @Rizier123.
- Merci pour ça. Aimeriez-vous poster une réponse sur StackOverflow ici sur cette page afin d'aider les futurs visiteurs?
- Je n'ai pas besoin de le faire; il y a déjà une réponse avec cette info (voir ci-dessous, par @Rizier123).
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs années, mais je pense que j'ai besoin de garder l'information à jour!
En php-7 il est possible de créer des classes anonymes, de sorte que vous êtes capable de faire des choses comme ceci:
Vous pouvez en lire plus à ce sujet dans la RFC (Il est accepté): https://wiki.php.net/rfc/anonymous_classes
Mais je ne sais pas comment elle est mise en œuvre pour Javascript, donc il peut y avoir quelques différences entre les classes anonymes en javascript et php.
Edit:
Que d'après les commentaires, posté, voici le lien vers le manuel de: http://php.net/manual/en/language.oop5.anonymous.php
"Anonyme" n'est pas la bonne terminologie quand on parle d'objets. Il serait mieux de dire "objet de anonyme type", mais cela ne s'applique pas aux PHP.
Tous les objets en PHP ont une classe. Le "défaut" de la classe est
stdClass
, et vous pouvez créer des objets de cette façon:Vous pouvez également profiter de le coulage d'un tableau à un objet pour un plus pratique syntaxe:
Toutefois, il convient de noter que la conversion d'un tableau à un objet est susceptible de produire des "intéressant" des résultats pour ceux de la matrice de touches qui ne sont pas valides PHP noms de variables, par exemple, voici une réponse de la mine qui montre ce qui se passe lorsque des touches de commencer avec des chiffres.
Oui, c'est possible! À l'aide de cette simple PHP Objet Anonyme classe. Comment cela fonctionne:
Bien sûr, cet objet est une instance de
AnObj
classe, il n'est pas vraiment anonyme, mais il est possible de définir des méthodes à la volée, comme le JavaScript n'.Jusqu'à récemment, c'est comment j'ai créé des objets à la volée.
Alors:
Mais maintenant, je aller avec:
Alors comme avant:
Bien sûr, si vous connaissez déjà les propriétés et les valeurs de la mettre à l'intérieur comme il a été mentionné:
NB: je ne sais pas quelles versions de PHP, cela fonctionne sur de sorte que vous devez être conscients de cela. Mais je pense que la première approche (qui est aussi court si il n'existe pas de propriétés pour définir au moment de la construction) devrait fonctionner pour toutes les versions qui ont json_encode/json_decode
Si vous souhaitez imiter JavaScript, vous pouvez créer une classe
Object
, et donc avoir le même comportement. Bien sûr, ce n'est pas tout à fait anonyme, mais il fonctionne.Qui va de la sortie élément 2. Ce qui leur a été volé un commentaire sur PHP: les Classes et les Objets.
Convertir le tableau en objet:
Si vous souhaitez créer un objet (comme en javascript) avec des propriétés dynamiques, sans avoir reçu un avertissement de la propriété non définie, lorsque vous n'avez pas de fixer une valeur à la propriété
Pas - parce que le javascript utilise des prototypes/direct déclaration des objets en PHP (et beaucoup d'autres langages à objets) d'un objet ne peut être créé à partir d'une classe.
Ainsi, la question devient - peut-on créer une classe anonyme.
Encore, la réponse est no - comment voulez-vous créer une instance de la classe sans être en mesure de le référencer?
Object var = new Object() { ... };
-- C++:class { ... } var;
Pour celui qui veut récursive de l'objet: