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
$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
$ 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 .
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
}
}
- 1. ¿cuál es la diferencia entre model-> alias y model-> name en CakePHP?
- 2. JQuery - $ (this) .attr ('name')
- 3. ¿Cuál es la diferencia entre "this", "$ this" y "$ (this)"?
- 4. ¿Cuál es la diferencia entre "$ (this)" y "this"?
- 5. jQuery: ¿Cuál es la diferencia entre '$ (this)' y 'this'?
- 6. Diferencia entre el módulo <name> = struct .. fin y módulo tipo <name> = struct .. end?
- 7. Diferencia entre loadClass (String name) y loadClass (String name, boolean resolve)
- 8. ¿Cuál es la diferencia entre UNIQUE, UNIQUE KEY y CONSTRAINT 'name' UNIQUE?
- 9. div # name vs #name
- 10. ¿Cuál es la diferencia entre synchronized (this) y synchronized (ClassName.class)?
- 11. ¿Hay alguna diferencia entre var name = function() {} & function name() {} en Javascript?
- 12. ¿Cuál es la diferencia entre ">" y "&>" en bash?
- 13. ¿Cuál es la diferencia entre <% %> y <%=%>?
- 14. ¿Cuál es la diferencia entre <%# %> y <%= %>?
- 15. ¿Cuál es la diferencia entre> = y =>?
- 16. ¿Cuál es la palabra clave `name` en JavaScript?
- 17. ProcessThread Name
- 18. Cuál es la diferencia entre $ y jQuery
- 19. ¿Deberíamos usar Long-Name o Short-Name en JavaScript Coding?
- 20. cuál es la diferencia entre '! =' Y '<>' en MySQL
- 21. ¿Cuál es la diferencia entre "<>" y "! ="?
- 22. python variable method name
- 23. ¿Cuál es la diferencia entre operator >> y operator >>> en java?
- 24. ¿Cuál es el propósito de SAML 2 Subject Name Identifier?
- 25. ¿Cuál es la diferencia entre ".equals" y "=="?
- 26. ¿Cuál es la diferencia entre <a_element /> y <a_element xsi: nil = "true" />?
- 27. diferencia entre $ query> num_rows() y $ this-> db-> count_all_results() en CodeIgniter y cuál se recomienda
- 28. ¿Cuál es la diferencia entre redirigir una salida usando ">", "&>", "> &" y "2 &>"?
- 29. ¿cuál es la diferencia entre los navegadores y el nodo?
- 30. Rails select_date form name
Tiene un error en la sintaxis. Mezcla de comillas simples con comillas dobles ¿verdad? (Intenté arreglarlo, y me sobreescribió) –
@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 –
Si estuviéramos programando, nos hundiríamos porque StackOverflow no tiene bloqueos/bloqueos de comentarios :) –