Qual é a diferença entre o 'this' e o 'self'?
Qual é a diferença entre o 'this' e o 'self'?
Eu ia tentar te explicar mas achei uma resposta muito mais completa no stackoverflow: https://pt.stackoverflow.com/questions/575/quando-usar-self-vs-this-em-php
Segue:
De forma simplificada, $this se refere ao objeto (instância) atual, e self se refere à classe. Portanto, como regra geral, usa-se $this para acessar membros (atributos, métodos) da instância e self para acessar membros estáticos.
Herança Quando se usa herança, no entanto, há diferença entre usar self e $this ao chamar um método da instância:
self::metodo() chama o metodo() da classe atual; $this->metodo() chama o metodo() da classe usada para instanciar o objeto que está sendo executado (que pode ser uma subclasse da classe onde a chamada é feita). Você pode descobrir que classe é essa usando get_class($this). Exemplo:
<?php
class Animal {
public function teste() {
echo "\$this é instância de " . get_class($this) . "\n";
// chama Animal::fala(), independentemente do
// tipo da instância
echo "self::fala(): ";
self::fala();
// chama fala() na classe usada pra instanciar
// este objeto
echo "\$this->fala(): ";
$this->fala();
}
public function fala() {
echo "Oi\n";
}
}
class Gato extends Animal {
public function fala() {
echo "Miau\n";
}
}
// Nesse caso, self != get_class($this)
// - self == Animal
// - get_class($this) == Gato
$gato = new Gato();
$gato->teste();
echo "\n";
// Nesse caso, self == get_class($this) == Animal
$animal = new Animal();
$animal->teste();
?>
Resultado:
$this é instância de Gato
self::fala(): Oi
$this->fala(): Miau
$this é instância de Animal
self::fala(): Oi
$this->fala(): Oi