Diferenças entre self, static, $this e NomeDaClasse no PHP

Escrito por Lucas Scemist em 30/11/2024
PHP Programação
Imagem Ilustrativa de Código.

Estas palavras especificam meios de referenciar e chamar métodos quando utilizando o conceito de classes no php, e pode nos deixar em dúvida sobre quando utilizá-los. Caso não conhecia todos, acompanhe este artigo.

No PHP, as palavras self, static, $this e NomeDaClasse desempenham papéis importantes no contexto de orientação a objetos. Cada uma delas tem seu uso e comportamento específicos, dependendo do contexto. Vamos explorar as diferenças e entender como utilizá-las.

Uso do $this

O $this é uma variável especial que faz referência à instância atual de um objeto. Ele é usado dentro de métodos não estáticos para acessar as propriedades e métodos da instância.

class Pessoa
{
    private string $nome;

    public function __construct(string $nome)
	{
        $this->nome = $nome; # Acessa a propriedade do objeto atual
    }

    public function dizerOla(): string
	{
        return "Olá, meu nome é {$this->nome}";
    }
}

$pessoa = new Pessoa('João');
echo $pessoa->dizerOla(); # Olá, meu nome é João

Uso do Nome da Classe

O próprio nome da classe pode ser usado para acessar métodos ou propriedades estáticos, bem como instanciar objetos.

class Mamifero
{
    public static string $tipo = 'mamíferos';

    public static function descricao(): string
    {
        return 'Os ' . self::$tipo . ' são incríveis.';
    }
}

echo Mamifero::$tipo; # Saída: mamíferos
echo Mamifero::descricao(); # Saída: Os mamíferos são incríveis.

Uso do self

A palavra-chave self é usada para acessar métodos ou propriedades estáticos dentro da própria classe onde foi declarada.

class Exemplo
{
    public static string $atributo = 'Olá, mundo!';

    public static function mostrarAtributo(): string
	{
        return self::$atributo; # Acessa diretamente o atributo estático
    }
}

echo Exemplo::mostrarAtributo(); # Saída: Olá, mundo!

Uso do static

Assim como o self, a palavra-chave static também é usada para acessar métodos ou propriedades estáticos, mas respeita o contexto de herança. Ou seja, quando chamada em uma classe filha, resolve os métodos ou propriedades no contexto dessa classe.

class Base
{
    public static function mostrarClasse(): string
    {
        return static::class; # Respeita o contexto dinâmico
    }
}

class Filha extends Base {}

echo Base::mostrarClasse(); # Saída: Base
echo Filha::mostrarClasse(); # Saída: Filha

Comparação Entre as Palavras

Palavra Contexto Respeita Herança? Usada para?
$this Instância atual N/A Propriedades e métodos da instância.
NomeDaClasse Classe específica Não Acessar métodos/atributos ou instanciar.
self Classe atual Não Métodos e propriedades estáticos da classe.
static Classe chamada Sim Métodos e propriedades estáticos dinâmicos.

Quando Usar Cada Um?

Compreender essas palavras é fundamental para tirar proveito total dos recursos de orientação a objetos no PHP. Usá-las de forma correta ajuda a escrever códigos mais organizados, reutilizáveis e de fácil manutenção.