2010-12-21 6 views
8

¿Cuándo utilizaría la palabra clave $this en PHP? Por lo que entiendo $this se refiere al objeto creado sin conocer el nombre de los objetos.

También la palabra clave $this solo se puede utilizar dentro de un método?

Un ejemplo sería excelente para mostrar cuándo puede usar $this.

+10

http://php.net/OOP -> Lo básico. –

+3

En particular, observe el Ejemplo # 2 aquí: http://php.net/manual/en/language.oop5.basic.php – RabidFire

+0

'$ this' no es una palabra clave en PHP (pero una * pseudovariable *), entonces tu pregunta no puede ser respondida – hakre

Respuesta

6

Una clase puede contener sus propias constantes, variables (llamadas "propiedades") y funciones (llamadas "métodos").

<?php 
class SimpleClass 
{ 
    // property declaration 
    public $var = 'a default value'; 

    // method declaration 
    public function displayVar() { 
     echo $this->var; 
    } 
} 
?> 

Algunos ejemplos de la $ este pseudo-variable:

<?php 
class A 
{ 
    function foo() 
    { 
     if (isset($this)) { 
      echo '$this is defined ('; 
      echo get_class($this); 
      echo ")\n"; 
     } else { 
      echo "\$this is not defined.\n"; 
     } 
    } 
} 

class B 
{ 
    function bar() 
    { 
     // Note: the next line will issue a warning if E_STRICT is enabled. 
     A::foo(); 
    } 
} 

$a = new A(); 
$a->foo(); 

// Note: the next line will issue a warning if E_STRICT is enabled. 
A::foo(); 
$b = new B(); 
$b->bar(); 

// Note: the next line will issue a warning if E_STRICT is enabled. 
B::bar(); 
?> 

El resultado del ejemplo sería:

  • $ esto se define (A)
  • $ esto no es definido.
  • $ esto se define (B)
  • $ esto no está definido.
1

Es utilizado en la programación orientada a objetos (POO):

<?php 
class Example 
{ 
    public function foo() 
    { 
     //code 
    } 

    public function bar() 
    { 
     $this->foo(); 
    } 
} 

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).

2

Solo usará $ this si está haciendo programación orientada a objetos en PHP. Es decir, si estás creando clases. He aquí un ejemplo:

class Item { 
    protected $name, $price, $qty, $total; 

    public function __construct($iName, $iPrice, $iQty) { 
    $this->name = $iName; 
    $this->price = $iPrice; 
    $this->qty = $iQty; 
    $this->calculate(); 
    } 

} 
+0

¡Gracias! Lo entiendo, pero ¿alguna vez usaría $ esto fuera de un método? – Imran

+0

Correcto, no lo haría porque $ esto solo tiene sentido en una clase. Fuera de eso, usarías el objeto, como $ a = new Item(), podrías hacer $ a-> methodName() –

1

Una vez que sé que terminan usando el this equivalente en otras lenguas es implementar una interfaz 'Fluido'; cada método de clase que de lo contrario devolvería void devuelve this, de modo que las llamadas a métodos se pueden encadenar fácilmente juntas.

public function DoThis(){ 
    //Do stuff here... 
    return $this; 
} 
public function DoThat(){ 
    //do other stuff here... 
    return $this; 
} 

Lo anterior se podría llamar así:

myObject->DoThis()->DoThat(); 

que puede ser útil para algunas cosas.

+0

. Quieres decir que se puede llamar como 'myObject-> DoThis() -> DoThat()' ;-)? – thedom

+0

@thedom - hehe ... lo siento; Rara vez trabajo en PHP y casi nunca hago OOP/PHP. Lo arreglaré ... ¡gracias por el aviso sobre ese error tonto! :) –

+0

no hay problema ... Me preguntaba y ya no tenía confianza en mí mismo cómo hacerlo: P // EDITAR ... $ myObject-> DoThis() -> DoThat() por supuesto lol! – thedom

0

no, creo que su idea es incorrecta .. $this se utiliza cuando se refiere a un objeto de la misma clase ..como esto

que tenemos un valor variable $ var y en QUE instancia de ese objeto debe ajustarse a 5

$ this-> var = 5;

3

El caso de uso más común está dentro de la Programación Orientada a Objetos, al tiempo que define o trabaja dentro de una clase. Por ejemplo:

class Horse { 
    var $running = false; 

    function run() { 
     $this->running = true; 
    } 
} 

Como se puede ver, dentro de la función run, podemos utilizar la variable $this para hacer referencia a la instancia de la clase de caballo que estamos "en". Entonces, la otra cosa a tener en cuenta es que si crea 2 clases Horse, la variable $this dentro de cada una se referirá a esa instancia específica de la clase Horse, no a ambas.

1

Se utiliza para cuando quiere trabajar con variables locales.

También puede leer más al respecto en here.

function bark() { 
    print "{$this->Name} says Woof!\n"; 
} 
0

El uso $ esto es hacer referencia a métodos o variables de instancia que pertenecen al objeto actual

$ this-> name = $ nombrar o $ this-> callSomeMethod()

que va a usar la variable o método implementado en el objeto actual subclasificado o no.

Si desea llamar específicamente una implementación de la clase padre que haría algo como

parent :: callSomeMethod()

1

$ esto se utiliza para hacer referencia a la instancia actual de un objeto. para que pueda hacer cosas como:

class MyClass { 
    private $name; 

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

    //vs 
    public function setName($pName) { 
     $name = $pName; 
    } 
} 

también otro uso interesante es que pueda métodos de la cadena:

class MyClass2 { 
    private $firstName; 
    private $lastName; 

    public function setFirstName($name) { 
     $this->firstName = $name; 
     return $this; 
    } 

    public function setLastName($name) { 
     $this->lastName = $name; 
     return $this; 
    } 

    public function sayHello() { 
     print "Hello {$this->firstName} {$this->lastName}"; 
    } 
} 

//And now you can do: 
$newInstance = new MyClass2; 
$newInstance->setFirstName("John")->setLastName("Doe")->sayHello(); 
1

$ este se utiliza cuando se ha creado una nueva instancia de un objeto.

Por ejemplo, imagina esto:

class Test { 
    private $_hello = "hello"; 

    public function getHello() { 
     echo $this->_hello; // note that I removed the $ from _hello ! 
    } 

    public function setHello ($hello) { 
     $this->_hello = $hello; 
    } 
} 

Con el fin de acceder al método getHello, tengo que crear una nueva instancia de la clase Test, así:

$obj = new Test(); 
// Then, I can access to the getHello method : 
echo $obj->getHello(); 
// will output "hello" 

$obj->setHello("lala"); 
echo $obj->getHello(); 
// will output "lala"  

De hecho , $ esto se usa dentro de la clase, cuando se instala. Se denomina ámbito.

Dentro de su clase que utiliza $ este (para acceder a * $ _ hola * por ejemplo), pero fuera de la clase, $ este no se refiere a los elementos dentro de su clase (como * $ _ hola *), es $ obj que hace.

Ahora, la diferencia principal entre $ obj y $ este está ya $ obj acceder a su clase desde el fuera, algunas restricciones sucede: si se define algo privada o protegida en su clase, al igual que mi variable de $ * _ * hola, $ objNO pUEDE acceder a ella (que es privado!) pero $ este puede, becase $ este fichero ave dentro de la clase.

-1
<?php 
    class identity { 
    public $name; 
    public $age; 
    public function display() { 
     return $this->name . 'is'. $this->age . 'years old'; 
    } 
    } 
?> 
Cuestiones relacionadas