2009-10-06 35 views
71

Veo la variable $this en PHP todo el tiempo y no tengo idea para qué se usa. Nunca lo he usado personalmente, y los motores de búsqueda ignoran el $ y termino buscando la palabra "esto".

¿Puede alguien decirme cómo funciona la variable $ this en PHP?

Respuesta

89

Es una referencia al objeto actual, se usa más comúnmente en código orientado a objetos.

Ejemplo:

<?php 
class Person { 
    public $name; 

    function __construct($name) { 
     $this->name = $name; 
    } 
}; 

$jack = new Person('Jack'); 
echo $jack->name; 

Esto almacena la cadena 'Jack' como una propiedad del objeto creado.

+11

1 de la terminología "objeto actual", ya que es una forma más precisa para describir el comportamiento a veces poco intuitivo de '$ this'. –

+0

Vi un código de ejemplo similar en el tutorial de KillerPHP OOP :) http://www.killerphp.com/tutorials/php-objects-page-1/ – Edson

8

Es la forma de referenciar una instancia de una clase desde su interior, al igual que muchos otros lenguajes orientados a objetos.

Desde el PHP docs:

El pseudo-variable $ esto está disponible cuando un método se llama desde dentro de un contexto objeto. $ esto es una referencia al objeto que llama (generalmente el objeto al que pertenece el método, pero posiblemente otro objeto, si el método se llama estáticamente desde el contexto de un objeto secundario).

0

Se refiere a la instancia de la clase actual, como meder dicho.

Ver el PHP Docs. Se explica en el primer ejemplo.

2

cuando creas una clase tienes (en muchos casos) variables de instancia y métodos (también conocidas como funciones). $ this accede a esas variables de instancia para que sus funciones puedan tomar esas variables y hacer lo que necesitan para hacer lo que quiera con ellas.

otra versión del ejemplo de meder:

class Person { 

    protected $name; //can't be accessed from outside the class 

    public function __construct($name) { 
     $this->name = $name; 
    } 

    public function getName() { 
     return $this->name; 
    } 
} 
// this line creates an instance of the class Person setting "Jack" as $name. 
// __construct() gets executed when you declare it within the class. 
$jack = new Person("Jack"); 

echo $jack->getName(); 

Output: 

Jack 
25

La mejor manera de aprender acerca de la variable $this en php PHP es preguntar de qué se trata. No nos pidan, pedir al compilador:

print gettype($this);   //object 
print get_object_vars($this); //Array 
print is_array($this);   //false 
print is_object($this);   //true 
print_r($this);     //dump of the objects inside it 
print count($this);    //true 
print get_class($this);   //YourProject\YourFile\YourClass 
print isset($this);    //true 
print get_parent_class($this); //YourBundle\YourStuff\YourParentClass 
print gettype($this->container); //object 
+3

has olvidado algunos puntos y comas: D – smileBeda

9

Sé que es cuestión de edad, de todos modos otra explicación exacta sobre $ este. $ this se usa principalmente para referirse a las propiedades de una clase.

Ejemplo:

Class A 
{ 
    public $myname; //this is a member variable of this class 

function callme() { 
    $myname = 'function variable'; 
    $this->myname = 'Member variable'; 
    echo $myname;     //prints function variable 
    echo $this->myname;    //prints member variable 
    } 
} 

salida:

function variable 

member variable 
2

$this es a reference to the calling object (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).

2

$ esta es una variable especial y se refiere al mismo objeto, es decir. sí mismo.

que en realidad se refieren instancia de clase actual

aquí es un ejemplo que despejará la declaración anterior

<?php 
class Books { 
    /* Member variables */ 
    var $price; 
    var $title; 

    /* Member functions */ 
    function setPrice($par){ 
    $this->price = $par; 
    } 

    function getPrice(){ 
    echo $this->price ."<br/>"; 
    } 

    function setTitle($par){ 
    $this->title = $par; 
    } 

    function getTitle(){ 
    echo $this->title ." <br/>"; 
    } 
} 
?> 
+0

por favor complétalo un poco más –

4

vamos a ver lo que pasa si no vamos a utilizar $ esto y tratar de tener variables de instancia y argumentos de constructor con el mismo nombre con el siguiente fragmento de código

<?php 

class Student { 
    public $name; 

    function __construct($name) { 
     $name = $name; 
    } 
}; 

$tom = new Student('Tom'); 
echo $tom->name; 

?> 

Se hace eco nada más que

<?php 

class Student { 
    public $name; 

    function __construct($name) { 
     $this->name = $name; // Using 'this' to access the student's name 
    } 
}; 

$tom = new Student('Tom'); 
echo $tom->name; 

?> 

Esto se hace eco 'Tom'

+2

Tu código Los fragmentos son exactamente los mismos o me estoy perdiendo algo? – Demento

+0

@Demento: sí. Lo arreglé, usando '$ this' en el segundo constructor. –

Cuestiones relacionadas