Modificadores de acessos: public, private e protected no PHP 8.3 - Maykon Silveira

No PHP 8.3, os métodos de uma classe podem ter diferentes modificadores de acesso, que determinam a visibilidade e o acesso a esses métodos fora ou dentro da própria classe. Os principais modificadores de acesso são:

  • public
  • private
  • protected

Além desses, há também o modificador static e a possibilidade de métodos finais (usando o modificador final). Vamos explorar todos esses em detalhes, com exemplos práticos.

1. Public

Visibilidade: O modificador public permite que o método seja acessado de qualquer lugar, tanto de dentro da classe quanto de fora.

Uso: Métodos públicos são usados para definir funções que precisam ser acessíveis por qualquer parte do programa.

Exemplo:

<?php
class Carro {
   public $modelo;
   
   public function __construct($modelo) {
       $this->modelo = $modelo;
   }

   // Método público
   public function exibirModelo() {
       echo "O modelo do carro é: " . $this->modelo;
   }
}

$carro = new Carro("Fusca");
$carro->exibirModelo();  // Pode ser chamado fora da classe
?>
Explicação:

  • O método exibirModelo é público, então pode ser chamado fora da classe, como mostrado no exemplo.

2. Private

Visibilidade: O modificador private limita o acesso ao método, permitindo que ele seja acessado apenas dentro da própria classe. Ou seja, não é possível acessar um método privado de fora da classe, nem mesmo por herança.

Uso: Métodos privados são úteis para funcionalidades internas de uma classe que não devem ser acessadas diretamente pelo código externo.

Exemplo:

<?php
class Carro {
   private $modelo;

   public function __construct($modelo) {
       $this->modelo = $modelo;
   }

   // Método privado
   private function exibirModelo() {
       echo "O modelo do carro é: " . $this->modelo;
   }

   // Método público para acessar o privado
   public function mostrarModelo() {
       $this->exibirModelo();  // Pode ser chamado dentro da própria classe
   }
}

$carro = new Carro("Fusca");
$carro->mostrarModelo();  // Isso funciona
// $carro->exibirModelo();  // Isso vai gerar um erro, pois é privado
?>
 

Explicação:

  • O método exibirModelo é privado, então não pode ser chamado fora da classe.
  • Para contornar isso, criamos um método público mostrarModelo que pode ser usado para acessar o método privado internamente.

3. Protected

Visibilidade: O modificador protected é um meio-termo entre public e private. Métodos e propriedades protected podem ser acessados dentro da própria classe e pelas classes que herdam dela, mas não podem ser acessados diretamente de fora da classe.

Uso: Métodos protected são úteis quando você quer que apenas a própria classe e suas subclasses possam acessar determinados métodos ou propriedades.

Exemplo:

<?php
class Carro {
   protected $modelo;

   public function __construct($modelo) {
       $this->modelo = $modelo;
   }

   // Método protegido
   protected function exibirModelo() {
       echo "O modelo do carro é: " . $this->modelo;
   }
}

class CarroEsportivo extends Carro {
   public function mostrarModeloEsportivo() {
       $this->exibirModelo();  // Acessando o método protegido na classe filha
   }
}

$carro = new CarroEsportivo("Fusca");
$carro->mostrarModeloEsportivo();  // Funciona na classe filha
// $carro->exibirModelo();  // Vai gerar um erro, pois é protegido e não pode ser acessado fora da classe ou de subclasses
?>
Explicação:

  • O método exibirModelo é protegido, então pode ser acessado dentro da própria classe Carro e também pela classe filha CarroEsportivo.
  • Porém, não pode ser chamado diretamente fora dessas classes.

4. Métodos Static

Visibilidade: Métodos static pertencem à classe e não à instância da classe. Isso significa que você pode chamar um método estático sem precisar criar um objeto da classe. Ele é chamado diretamente pela classe.

Uso: Métodos estáticos são úteis quando você não precisa acessar nenhuma propriedade ou método não estático da classe. Eles podem ser chamados sem criar um objeto da classe.

Exemplo:

<?php
class Calculadora {
   // Método estático
   public static function somar($a, $b) {
       return $a + $b;
   }
}

// Chamando o método estático sem criar uma instância
echo Calculadora::somar(5, 3);  // Saída: 8
?>
Explicação:

  • O método somar é estático, e por isso foi chamado diretamente pela classe Calculadora, sem a necessidade de criar um objeto.

5. Métodos Finais (final)

Visibilidade: O modificador final pode ser aplicado a métodos e classes. Quando aplicado a um método, impede que ele seja sobreposto nas subclasses.

Uso: Métodos finais são usados quando você deseja garantir que uma funcionalidade não será alterada por classes filhas.

Exemplo:

<?php
class Carro {
   // Método final, não pode ser sobrescrito
   final public function exibirModelo() {
       echo "O modelo do carro é: Fusca";
   }
}

class CarroEsportivo extends Carro {
   // Tentando sobrescrever o método final irá gerar um erro
   // public function exibirModelo() { 
   //     echo "Modelo esportivo";
   // }
}

$carro = new Carro();
$carro->exibirModelo();  // Isso funciona
?>
Explicação:

  • O método exibirModelo é final, o que significa que ele não pode ser sobrescrito na classe CarroEsportivo.
  • Tentativas de sobrescrever o método final resultam em erro.

6. Métodos Abstratos (abstract)

Visibilidade: O modificador abstract é usado em classes abstratas. Um método abstrato não possui implementação na classe base e deve ser implementado nas classes filhas.

Uso: Métodos abstratos são úteis quando você define uma classe base que deve ser estendida por outras classes, mas a implementação do método precisa ser fornecida pelas subclasses.

Exemplo:

<?php
abstract class Animal {
   // Método abstrato
   abstract public function fazerSom();
}

class Cachorro extends Animal {
   public function fazerSom() {
       echo "Au au!";
   }
}

$cachorro = new Cachorro();
$cachorro->fazerSom();  // Saída: Au au!
?>
 

Explicação:

  • A classe Animal é abstrata e define um método abstrato fazerSom. Isso significa que qualquer classe que herde de Animal deve implementar o método fazerSom.
  •  

7. Resumo de Modificadores de Métodos

  • public: O método pode ser acessado de qualquer lugar.
  • private: O método só pode ser acessado dentro da própria classe.
  • protected: O método pode ser acessado dentro da própria classe e por classes que herdam dela.
  • static: O método é chamado diretamente pela classe, sem a necessidade de criar uma instância.
  • final: O método não pode ser sobrescrito em classes filhas.
  • abstract: O método não tem implementação na classe abstrata e deve ser implementado nas classes filhas.

Esses modificadores oferecem grande flexibilidade e controle sobre a estrutura de uma classe, garantindo que os dados e funcionalidades sejam manipulados da maneira mais segura e adequada para cada situação.

Simples, rápido e eficiente, não é mesmo? 🚀

Atenciosamente,
Maykon Silveira

 

Usamos cookies para personalizar sua experiência. Ao continuar visitando este site, você concorda com o uso de cookies

Mais