167 votes

Obtenir la propriété de la classe PHP par chaîne

Comment puis-je obtenir une propriété dans un PHP basé sur une chaîne? Je l'appellerai magic . Alors, qu'est-ce que magic ?

 $obj->Name = 'something';
$get = $obj->Name;
 

serait comme...

 magic($obj, 'Name', 'something');
$get = magic($obj, 'Name');
 

272voto

Peter Bailey Points 62125

Comme ça

 <?php

$prop = 'Name';

echo $obj->$prop;
 

Ou, si vous avez le contrôle de la classe, implémentez l'interface ArrayAccess et procédez comme suit.

 echo $obj['Name'];
 

185voto

this.lau_ Points 23290

Si vous souhaitez accéder à la propriété sans créer de variable intermédiaire, utilisez la notation {} :

 $something = $object->{'something'};
 

Cela vous permet également de construire le nom de la propriété dans une boucle, par exemple:

 for ($i = 0; $i < 5; $i++) {
    $something = $object->{'something' . $i};
    // ...
}
 

17voto

sirlancelot Points 5896

Ce que vous demandez, c'est ce qu'on appelle des variables variables . Tout ce que vous avez à faire est de stocker votre chaîne dans une variable et d'y accéder comme suit:

 $Class = 'MyCustomClass';
$Property = 'Name';
$List = array('Name');

$Object = new $Class();

// All of these will echo the same property
echo $Object->$Property;  // Evaluates to $Object->Name
echo $Object->{$List[0]}; // Use if your variable is in an array
 

9voto

Ólafur Waage Points 40104

Quelque chose comme ça? Je ne l'ai pas testé, mais cela devrait fonctionner correctement.

 function magic($obj, $var, $value = NULL)
{
    if($value == NULL)
    {
        return $obj->$var;
    }
    else
    {
        $obj->$var = $value;
    }
}
 

5voto

Jon Benedicto Points 7020

Stockez simplement le nom de la propriété dans une variable et utilisez-la pour accéder à la propriété. Comme ça:

 $name = 'Name';

$obj->$name = 'something';
$get = $obj->$name;
 

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