2010-02-05 17 views
12

Me pregunto ¿cuál es la diferencia entre $this->name y $this->$name? También $this tiene que llamarse estrictamente este o puede ser cualquier cosa?

Respuesta

20

$this es un nombre de variable reservado y no se puede utilizar para nada más. Específicamente lo señala al objeto en el que está trabajando actualmente. Tiene que usar $this porque no sabe a qué objeto variable se le asignará.

$this->name se refiere a la variable de la clase actual name

$this->$name se refiere a la variable de clase de lo que el valor de $name es. Por lo tanto

$name = "name"; 
echo $this->$name; // echos the value of $this->name. 

$name = "test"; 
echo $this->$name; // echos the value of $this->test 
6

$ esto es un nombre reservado utilizado en PHP para que apunte a la instancia actual de la clase que usted está utilizando en (quoting):

El pseudo-variable de $this está disponible cuando se llama a un método desde un contexto de objeto .
$this es una referencia al objeto de llamada (por lo general el objeto al que pertenece el método, pero posiblemente otro objeto, si el método es llamado estáticamente desde el contexto de un objeto secundario).


Al utilizar $this->name, se accede a la propiedad con el nombre name del objeto actual.


Al utilizar $this->$name, $ nombre se determina antes de acceder a la propiedad - lo que significa que accede a la propiedad que está contenido en nombre de la variable local $name.

Por ejemplo, con esta porción de código:

$name = 'abc'; 
echo $this->$name; 

que realmente va eco del contenido de la propiedad de ABC, como si hubiera escrito:

echo $this->abc; 

Al hacer esto, se están utilizando variable variables(donde se cita):

propiedades de clase de mayo una También se debe acceder al usando nombres de propiedades variables.
El nombre de propiedad de la variable será resuelto dentro del alcance desde el que se realiza la llamada .
Por ejemplo, si tiene una expresión como $foo->$bar, entonces el ámbito local será examinado para $bar y su valor se utilizará como el nombre de la propiedad de $foo.
Este también es verdadero si $ bar es una matriz de acceso .

+0

Tiene un error en la sintaxis. Mezcla de comillas simples con comillas dobles ¿verdad? (Intenté arreglarlo, y me sobreescribió) –

+0

@Chacha: Ergh, una vez más, demasiado temprano en la mañana ^^ gracias por notar eso :-) - huhu, ambos editamos mi respuesta para corregir ese problema, veo :-D ;; y editamos nuestros comentarios al mismo tiempo, también :-D –

+0

Si estuviéramos programando, nos hundiríamos porque StackOverflow no tiene bloqueos/bloqueos de comentarios :) –

2

Esta pregunta simplemente apareció después de una actualización. Me gustó la pregunta, así que pensé en agregar mi propio ejemplo de la diferencia.

class Test 
{ 
    public $bar = 'bar'; 
    public $foo = 'foo'; 

    public function __construct() 
    { 
     $bar = 'foo'; 

     $this->bar; // bar 
     $this->$bar; // foo 
    } 
} 
Cuestiones relacionadas