Comment obtenir une propriété dans un PHP basée sur une chaîne? Je vais l'appeler magic
. Alors qu'est-ce que c'est magic
?
$obj->Name = 'something';
$get = $obj->Name;
serait comme...
magic($obj, 'Name', 'something');
$get = magic($obj, 'Name');
php
string
oop
properties
Daniel A. White
la source
la source
ArrayAccess
,Countable
et l'une des interfaces de l'itérateur, elle ne se distingue généralement pas d'une normalearray()
Si vous souhaitez accéder à la propriété sans créer de variable intermédiaire, utilisez la
{}
notation:Cela vous permet également de créer le nom de la propriété dans une boucle par exemple:
la source
$this->{$property}[$name]
, sinon vous$this->$property[$name]
$this->$property[$name]
cela réussisse, bien que ce soit probablement un bogue.$name
est converti silencieusement en un entier. Dans le cas d'une chaîne non numérique, c'est le cas0
. Ensuite, cet index de chaîne de la valeur de$property
est utilisé comme nom de propriété. Si$property
contient la valeur "abc", alors cela fera référence à la propriété$this->a
(index 0). S'il existe une telle propriété, cela réussira.Ce que vous demandez s'appelle les variables variables . Tout ce que vous avez à faire est de stocker votre chaîne dans une variable et d'y accéder comme suit:
la source
Quelque chose comme ça? Je ne l'ai pas testé mais devrait fonctionner correctement.
la source
Stockez simplement le nom de la propriété dans une variable et utilisez la variable pour accéder à la propriété. Comme ça:
la source
Il peut y avoir des réponses à cette question, mais vous voudrez peut-être voir ces migrations vers PHP 7
source: php.net
la source
C'est simple, $ obj -> {$ obj-> Name} les accolades encapsuleront la propriété un peu comme une variable variable.
C'était une recherche de premier ordre. Mais n'a pas résolu ma question, qui utilisait $ this. Dans le cas de ma situation, l'utilisation du crochet bouclé a également aidé ...
exemple avec Code Igniter get instance
dans une classe de bibliothèque source appelée quelque chose avec une instance de classe parente
la classe de bibliothèque qui doit s'approvisionner à partir d'une autre classe également avec l'instance des parents
la source
Juste comme un ajout: De cette façon, vous pouvez accéder à des propriétés avec des noms qui seraient autrement inutilisables
(pas que vous devriez, mais au cas où vous deviez le faire).Si vous voulez faire des choses encore plus sophistiquées, vous devriez vous pencher sur la réflexion
la source
Au cas où quelqu'un d'autre voudrait trouver une propriété profonde de profondeur inconnue, j'ai trouvé ce qui suit sans avoir besoin de parcourir toutes les propriétés connues de tous les enfants.
Par exemple, pour trouver $ Foo-> Bar-> baz, ou $ Foo-> baz, ou $ Foo-> Bar-> Baz-> dave, où $ path est une chaîne comme «foo / bar / baz».
Et puis appelez avec quelque chose comme:
la source
Voici ma tentative. Il a quelques contrôles communs de «stupidité» intégrés, vous assurant que vous n'essayez pas de définir ou d'obtenir un membre qui n'est pas disponible.
Vous pouvez déplacer ces vérifications 'property_exists' vers __set et __get respectivement et les appeler directement dans magic ().
la source
Cette fonction vérifie si la propriété existe sur cette classe de l'un de ses enfants, et si c'est le cas, elle obtient la valeur sinon elle retourne null. Alors maintenant, les propriétés sont facultatives et dynamiques.
Usage:
la source
pourquoi edit: before: en utilisant eval (evil) after: aucun eval du tout. être vieux dans cette langue.
la source