Em PHP 5 podemos referenciar métodos e atributos de uma classe dentro de outros métodos dela utilizando self:: ou $this, mas muitas pessoas não sabem quando usar um e o outro...
Basicamente a diferença está em self:: referir-se à classe e $this-> referir-se ao objeto.
Bom, suponha as classe:
class Carro {
public $marcha;
public function reduzirMarcha() {
$this->marcha--;
}
}
?>
O atributo $marcha representa a marcha que o carro está atualmente e o método reduzirMarcha decrementa esse atributo. Observe que utilizamos $this->.
Vamos instanciar um objeto dessa classe:
$corsa = new Carro();
$corsa->marcha = 2;
$corsa->reduzirMarcha();
echo $corsa->marcha; //irá retornar 1.
?>
Se utilizar-mos self:: ao invés de $this-> não irá funcionar e no PHP 5 irá dar Fatal Error por $marcha não ser uma variavel estática.
Observe agora:
Agora a classe Carro possui uma variável estática $quantidade que não poderá ser chamada a partir de um objeto e somente a partir da Classe ( sem estar instanciada ).
Lembre-se só utilizamos self:: para variáveis estáticas.
Retirado de PHPendo