Entenda a diferença entre SELF:: e $this no PHP

Não é difícil em aplicações PHP,  se esbarrar com essas duas nomenclaturas se comunicando com métodos e parâmetros em um código fonte.
Mas qual é a diferença?

O $this acessa basicamente os métodos e parâmetros do objeto em que ele está. Já o SELF:: acessa os métodos e parâmetros da Classe.

class Casa {
	public function teste () {
		self::sala();
		$this->sala();
	}
	public function sala () {
		echo "Sala na classe Casa";
	}
}
class Comodos extends Casa {
	public function sala () {
		echo "Sala no objeto Comodos";
	}
}

Agora irei instanciar o objeto Comodos no código, desta forma:

$comodos = new Comodos();
$comodos->teste();

Perceba, eu estou acessando o objeto Comodos que se extende para a classe Casa. Eu instâncio o método teste(), que está dentro da classe Casa e ele vai me dizer que self:: irá imprimir:

  • Sala na classe Casa

E o $this irá imprimir:

  • Sala no objeto Comodos

neste caso, temos dois métodos nomeados como “sala” igualmente, um no objeto e o outro na classe, sendo assim o this e o self são usados para acessar cada um destes métodos individualmente.

E se por acaso eu não instânciar o objeto e sim a classe? desta forma:

$casa = new Casa();
$casa->teste();

Neste caso o php entenderá self:: e $this como a mesma requisição
imprimindo:

  • Sala na classe Casa
  • Sala na classe Casa

12 de setembro de 2017 por Ramon Saldanha