67 votos

Obtener la propiedad de la clase PHP por cadena

¿Cómo obtengo una propiedad en una basada en una cadena de PHP? Yo lo llamo magic . ¿Qué es magic ?

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

sería como...

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

130voto

Peter Bailey Puntos 62125

Así

<?php

$prop = 'Name';

echo $obj->$prop;

O, si usted tiene control sobre la clase implementa la interfaz ArrayAccess y hacerlo

echo $obj['Name'];

83voto

this.lau_ Puntos 23290

Si desea tener acceso a la propiedad sin crear una variable intermedia, uso el {} notación:

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

También le permite construir el nombre de la propiedad en un bucle por ejemplo:

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

9voto

sirlancelot Puntos 5896

Acerca de lo que pides se llaman Variables Variable. Todo lo que necesitas hacer es almacenar la cadena en una variable y acceder a él así:

$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

6voto

Ólafur Waage Puntos 40104

¿Algo como esto? No has probado, pero debería funcionar bien.

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

5voto

Jon Benedicto Puntos 7020

Sólo almacenar el nombre de propiedad en una variable y usar la variable de acceso a la propiedad. Así:

$name = 'Name';

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X