Acesso interno a atributos/métodos estáticos no PHP

image_pdfimage_print

Iremos nesta dica tratar de duas maneiras de acessar atributos ou métodos estáticos internamentes em uma classe e mostrar a diferença de funcionalidade dos mesmos.

Iremos falar sobre o static:: e self:: . A maioria dos programadores os utiliza sem nem saber as diferenças resultantes.

Quando se está na classe primária/raiz, realmente não haverá diferença no comportamento dos dois modos de acesso.

No entanto ao se estender a classe, o comportamento se altera. Enquanto o self:: sempre irá dar preferência a classe na qual é declarado, o static:: dará preferência a classe em que o chama.

Abaixo um exemplo para demonstrar esta diferença quando se tratando com classe estendida.

class a{
    static protected $test="class a";

    public function static_test(){
        echo static::$test; // Imprimirá 'class a' ou 'class b'. Depende de quem chamou. Ver abaixo.
        echo self::$test; // Imprimirá sempre 'class a'
    }
}

class b extends a{
    static protected $test="class b";
}

$objA = new a();
$objA->static_test();
//echo static::$test; => Imprimirá 'class a'
//echo self::$test; => Imprimirá 'class a'

$objB = new b();
$objB->static_test();
//echo static::$test; => Imprimirá 'class b'
//echo self::$test; => Imprimirá 'class a'
Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!