2009-05-12 24 views
36

¿Cómo puedo hacer referencia a una propiedad de clase sabiendo solo una cadena?

class Foo 
{ 
    public $bar; 

    public function TestFoobar() 
    { 
     $this->foobar('bar'); 
    } 

    public function foobar($string) 
    { 
     echo $this->$$string; //doesn't work 
    } 
} 

¿cuál es la forma correcta de evaluar la cadena?

Respuesta

62

Solo necesita usar un $ al hacer referencia a la variable de miembro de un objeto utilizando una variable de cadena.

echo $this->$string; 
3

usted estuvo muy cerca. acabas de agregar 1 signo $ adicional.

public function foobar($string) 
{ 
    echo $this->$string; //will work 
} 
0
echo $this->$string; //should work 

Sólo es necesario $$string cuando se accede a una variable local que sólo tengan su nombre almacenado en una cadena. Como normalmente en una clase accede a ella como $obj->property, solo necesita agregar $.

18

Como los otros han mencionado, $ this -> $ string debería hacer el truco.

Sin embargo, este

$this->$$string; 

realidad evaluará cadena, y evaluar de nuevo el resultado de eso.

$foo = 'bar'; 
$bar = 'foobar'; 
echo $$foo; //-> $'bar' -> 'foobar' 
0

que recordar la sintaxis exacta, tome en cuenta que se utiliza un $ más de lo que normalmente usa. A medida que utiliza $object->property para acceder a una propiedad del objeto, el acceso dinámico se realiza con $object->$property_name.

27

Si desea utilizar un valor de propiedad para obtener el nombre de una propiedad, es necesario utilizar "{" entre paréntesis:

$this->{$this->myvar} = $value; 

incluso si son objetos, los que trabajan:

$this->{$this->myobjname}->somemethod(); 
+0

Esto hizo el truco para mí (PHP 5.2) – doublejosh

+0

¡Increíble que PHP permita estas estructuras! Pero también puede ser bastante vago para otros – MDijkstra

+0

También es útil si está combinando literal con var dinámica, por ejemplo .: '$ this -> {" my_prop _ ". $ I}' –

Cuestiones relacionadas