self:: e $this->. Qual a diferença?

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.

You can leave a response, or trackback from your own site.

Leave a Reply

Powered by WordPress | Find Low APR Credit Cards at BestInCreditCards.com | Thanks to iApplyForCreditCards.com, RPG Soundtracks and Transfer of Equity
SEO Powered by Platinum SEO from Techblissonline