avec un nouveau tableau, je fais ceci:
$aVal = array();
$aVal[key1][var1] = "something";
$aVal[key1][var2] = "something else";
Existe-t-il une syntaxe similaire pour un objet
(object)$oVal = "";
$oVal->key1->var1 = "something";
$oVal->key1->var2 = "something else";
$var = (object) (boolean) (string) (int) (array) new StdClass;
Vous savez, juste pour être en sécurité.Arrays - How to define an empty object in PHP
. N'a rien à voir avec les tableauxRéponses:
Un commentaire dans le manuel le résume le mieux:
la source
stdClass
dans ma tête comme "classe standard"new \stdClass();
PHP Namespace DocstdClass()
du motAIDS
?La manière standard de créer un objet "vide" est:
Mais, avec PHP> = 5.4, je préfère personnellement utiliser:
Il est plus court et je le considère personnellement plus clair car stdClass pourrait être trompeur pour les programmeurs débutants (c'est-à-dire "Hé, je veux un objet, pas une classe!" ...).
La même chose avec PHP <5.4 est:
(object)[]
est équivalent ànew stdClass()
.Voir le manuel PHP ( ici ):
et ( ici ):
Cependant, rappelez-vous que vide ($ oVal) retourne faux , comme @PaulP l'a dit:
Concernant votre exemple, si vous écrivez:
PHP crée l'avertissement suivant, créant implicitement la propriété
key1
(un objet lui-même)Cela pourrait être un problème si votre configuration (voir niveau de rapport d'erreurs ) affiche cet avertissement au navigateur. C'est un autre sujet entier, mais une approche rapide et sale pourrait être d'utiliser l' opérateur de contrôle d'erreur (@) pour ignorer l'avertissement:
la source
stdClass
passe.stdClass
fait. J'ai utiliséstdClass
sur le code qui répond à la question. Je suis désolé mais je ne crée pas de nouveau problème, c'était mon opinion personnelle (comme je l'ai écrit).(object) []
Je tiens à souligner qu'en PHP, il n'y a rien de tel qu'un objet vide dans le sens:
mais bien sûr $ obj sera vide.
D'autre part, un tableau vide signifie vide dans les deux cas
Citation de la fonction changelog vide
la source
php.net a dit qu'il était préférable:
la source
J'aime à quel point il est facile de créer des objets de type anonyme en JavaScript:
J'essaie donc toujours d'écrire ce genre d'objets en PHP comme le fait javascript :
Mais comme il s'agit essentiellement d'un tableau, vous ne pouvez pas faire des choses comme assigner des fonctions anonymes à une propriété comme js:
Eh bien, vous pouvez le faire, mais l'OMI n'est pas pratique / propre:
En outre, en utilisant ce synthax, vous pouvez trouver des surprises amusantes , mais cela fonctionne très bien dans la plupart des cas.
la source
En plus de la réponse de zombat si vous continuez à oublier
stdClass
Vous pouvez maintenant:
la source
Vous pouvez utiliser
new stdClass()
(ce qui est recommandé):Ou vous pouvez convertir un tableau vide en un objet qui produit une nouvelle instance vide de la classe intégrée stdClass:
Ou vous pouvez convertir la
null
valeur en un objet qui produit une nouvelle instance vide de la classe intégrée stdClass:la source
pour accéder aux données dans une stdClass de la même manière que vous le faites avec un tableau associatif, utilisez simplement la syntaxe {$ var}.
la source
Comme d'autres l'ont souligné, vous pouvez utiliser stdClass. Cependant, je pense qu'il est plus propre sans le (), comme ceci:
Cependant, sur la base de la question, il semble que ce que vous voulez vraiment, c'est pouvoir ajouter des propriétés à un objet à la volée. Vous n'avez pas besoin d'utiliser stdClass pour cela, bien que vous le puissiez. Vous pouvez vraiment utiliser n'importe quelle classe. Créez simplement une instance d'objet de n'importe quelle classe et commencez à définir les propriétés. J'aime créer ma propre classe dont le nom est simplement o avec quelques fonctionnalités étendues de base que j'aime utiliser dans ces cas et qui est agréable pour s'étendre à partir d'autres classes. Fondamentalement, c'est ma propre classe d'objets de base. J'aime aussi avoir une fonction simplement nommée o (). Ainsi:
Si vous n'aimez pas avoir votre propre type d'objet de base, vous pouvez simplement demander à o () de renvoyer une nouvelle stdClass. Un avantage est que o est plus facile à retenir que stdClass et est plus court, que vous l'utilisiez comme nom de classe, nom de fonction ou les deux. Même si vous n'avez pas de code à l'intérieur de votre classe o, il est toujours plus facile à mémoriser que la stdClass maladroitement capitalisée et nommée (qui peut invoquer l'idée d'une `` classe de maladies sexuellement transmissibles ''). Si vous personnalisez la classe o, vous pourriez trouver une utilisation pour la fonction o () au lieu de la syntaxe du constructeur. Il s'agit d'une fonction normale qui renvoie une valeur, qui est moins limitée qu'un constructeur. Par exemple, un nom de fonction peut être transmis sous forme de chaîne à une fonction qui accepte un paramètre appelable. Une fonction prend également en charge le chaînage. Vous pouvez donc faire quelque chose comme:
C'est un bon début pour une "langue" de base sur laquelle construire d'autres couches linguistiques, la couche supérieure étant écrite en DSL internes complètes. C'est similaire au style de développement lisp, et PHP le supporte bien mieux que la plupart des gens ne le pensent. Je me rends compte que c'est un peu une tangente pour la question, mais la question touche à ce que je pense est la base pour utiliser pleinement la puissance de 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é non définie.
la source
Vous pouvez également essayer de cette façon.
Production:
la source
Utilisez un objet générique et mappez-y des paires de valeurs clés.
Ou transformez un tableau en objet
la source
Si vous ne voulez pas faire ça:
Vous pouvez utiliser l'une des options suivantes:
PHP> = 5,4
PHP <5,4
la source
Voici un exemple avec l'itération:
la source
Vous avez cette technique mauvaise mais utile:
la source
stdClass est l'objet PHP par défaut. stdClass n'a pas de propriétés, de méthodes ou de parent. Il ne prend pas en charge les méthodes magiques et n'implémente aucune interface.
Lorsque vous convertissez un scalaire ou un tableau en objet, vous obtenez une instance de stdClass. Vous pouvez utiliser stdClass chaque fois que vous avez besoin d'une instance d'objet générique.
stdClass n'est PAS une classe de base! Les classes PHP n'héritent pas automatiquement d'aucune classe. Toutes les classes sont autonomes, sauf si elles étendent explicitement une autre classe. PHP diffère de nombreux langages orientés objet à cet égard.
Vous ne pouvez pas définir une classe nommée 'stdClass' dans votre code. Ce nom est déjà utilisé par le système. Vous pouvez définir une classe nommée 'Object'.
Vous pouvez définir une classe qui étend stdClass, mais vous n'en tirerez aucun avantage, car stdClass ne fait rien.
(testé sur PHP 5.2.8)
la source