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:
<?php
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:
<?php $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:
<?php
class Carro {
public static $quantidade;
public function __construct() {
self::$quantidade++;
}
}
$corsa = new Carro();
$gol = new Carro();
echo Carro::$quantidade; //irá retornar 2. (duas instancias de carro)
?>
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.
RSS Feed
Twitter
Posted in
Tags: 