2011-02-24 11 views
14

No es realmente un problema, más como curiosidad de mi parte, sino como un ejemplo, decir que tengo una clase php:

class baseTestMain 
{ 
    protected function testFunction() 
    { 
     echo 'baseTestMain says hi'; 
    } 
} 

y otra clase que se extiende desde la clase anterior:

class aSubClass extends baseTestMain 
{ 
    public function doingSomething() 
    { 
     parent::testFunction(); 
     //someextrastuffhere 
    } 
} 

Normalmente , cuando quiero llamar a un método principal cuando defino un nuevo método en la subclase, haré lo anterior - parent::methodnamehere(), sin embargo, en lugar de parent:: también puede usar $this->methodname() y la operación sería la misma.

class aSubClass extends baseTestMain 
{ 
    public function doingSomething() 
    { 
     $this->testFunction(); 
     //someextrastuffhere 
    } 
} 

Así que lo que te pido es, debo usar o usar parent::testFunction();$this->testFunction();? o hay alguna diferencia que me he perdido? Si no, ¿cuál es su preferencia o el método preferido?

Tenga en cuenta que no estoy reemplazando o ampliando esa función en la subclase, esencialmente la implementación se lleva a cabo desde el principal.

Respuesta

26

En su caso, como aSubClass::testFunction() se hereda de baseTestMain::testFunction(), use $this->testFunction(). Solo debe usar parent::testFunction() si va a anular ese método en su subclase, dentro de su implementación.

La diferencia es que parent:: llama a la implementación de los padres, mientras que las llamadas $this-> aplicación del niño si el niño tiene su propia aplicación en lugar de heredarlo de los padres.

+0

"Tenga en cuenta que no estoy anulando ni ampliando esa función en la subclase, esencialmente la implementación se lleva a cabo desde el principal". –

+0

@Ignacio Vazquez-Abrams: Gracias, agregué otro párrafo al principio que responde la pregunta. Supongo que mi ejemplo es irrelevante, así que lo descarté. – BoltClock

+1

@Aesphere, teniendo en cuenta la legibilidad y el concepto, esta es la mejor respuesta. –

5

Llamar al método en el elemento primario impide que los niños de la clase participen en el polimorfismo correctamente ya que nunca se llamará a su redefinición del método.

Cuestiones relacionadas