"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Noções básicas sobre modificadores de acesso em PHP OOP: público, protegido e privado

Noções básicas sobre modificadores de acesso em PHP OOP: público, protegido e privado

Publicado em 2024-11-08
Navegar:536

Understanding Access Modifiers in PHP OOP: Public, Protected, and Private

Na Programação Orientada a Objetos (OOP) PHP, modificadores de acesso controlam a visibilidade das propriedades e métodos da classe. Os principais modificadores de acesso em PHP são públicos, protegidos e privados.

Este artigo orientará você na finalidade e no uso desses modificadores de acesso e explicará como aplicá-los de maneira eficaz em PHP OOP.

1. Modificador de acesso público

  • Palavra-chave: público
  • Visibilidade: Acessível de qualquer lugar — dentro da classe, fora da classe e em classes derivadas.
  • Caso de uso: Use public para propriedades ou métodos que devem ser acessíveis em qualquer contexto.

Exemplo:

class User {
    public $name = "John";

    public function greet() {
        return "Hello, " . $this->name;
    }
}

$user = new User();
echo $user->greet();  // Output: Hello, John

Neste exemplo, tanto a propriedade $name quanto o método greet() são públicos, permitindo que sejam acessados ​​diretamente de fora da classe.

2. Modificador de acesso protegido

  • Palavra-chave: protegido
  • Visibilidade: Acessível dentro da própria classe e por subclasses (classes filhas), mas não de fora da classe.
  • Caso de uso: Use protegido para permitir que classes derivadas acessem certas propriedades ou métodos, mantendo-os ocultos do código externo.

Exemplo com acesso correto:

class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

class Employee extends Person {
    public function showAge() {
        return $this->getAge();  // Correct: Accesses protected method within a subclass
    }
}

$employee = new Employee();
echo $employee->showAge();  // Output: 30

Neste exemplo, getAge() é um método protegido, que pode ser acessado na classe Employee, uma subclasse de Person.

Exemplo com erro:

class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

$person = new Person();
echo $person->getAge();  // Error: Cannot access protected method Person::getAge()

Mensagem de erro: Erro fatal: Erro não detectado: Não é possível acessar o método protegido Person::getAge()

Neste caso, tentar acessar o método protegido getAge() diretamente de uma instância de Person resulta em um erro porque os métodos protegidos não são acessíveis de fora da classe.

3. Modificador de acesso privado

  • Palavra-chave: privado
  • Visibilidade: Acessível apenas dentro da classe onde está definido. Não acessível de subclasses ou código externo.
  • Caso de uso: Use private para ocultar propriedades ou métodos de qualquer código fora da classe, incluindo classes derivadas.

Exemplo com acesso correto:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }

    public function showBalance() {
        return $this->getBalance();  // Correct: Accesses private method within the same class
    }
}

$account = new BankAccount();
echo $account->showBalance();  // Output: 1000

Neste exemplo, o método getBalance() é privado, portanto só pode ser acessado dentro da classe BankAccount. O método showBalance() é público e pode ser usado para acessar indiretamente o getBalance() privado.

Exemplo com erro:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }
}

$account = new BankAccount();
echo $account->getBalance();  // Error: Cannot access private method BankAccount::getBalance()

Mensagem de erro: Erro fatal: Erro não detectado: Não é possível acessar o método privado BankAccount::getBalance()

Neste caso, tentar acessar o método privado getBalance() diretamente de uma instância de BankAccount resulta em um erro porque os métodos privados não são acessíveis de fora da classe.

Exemplo com Erro na Subclasse:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }
}

class SavingsAccount extends BankAccount {
    public function showBalance() {
        return $this->getBalance();  // Error: Cannot access private method BankAccount::getBalance()
    }
}

$savings = new SavingsAccount();
echo $savings->showBalance();

Mensagem de erro: Erro fatal: Erro não detectado: Não é possível acessar o método privado BankAccount::getBalance()

Aqui, o método privado getBalance() é inacessível até mesmo para subclasses como SavingsAccount, demonstrando que métodos privados não podem ser acessados ​​fora de sua classe de definição.

4. Resumo dos modificadores de acesso

Modificador Aula interna Classe derivada Fora da aula
Público Sim Sim Sim
Protegido Sim Sim Não
Privado Sim Não Não

5. Melhores práticas

  • Use public com moderação para expor apenas o necessário. Prefira o encapsulamento e exponha a funcionalidade por meio de métodos públicos.
  • Use protected para permitir que subclasses acessem propriedades ou métodos necessários enquanto os oculta do código externo.
  • Use private para encapsular totalmente os internos da classe e impedir o acesso de classes externas ou derivadas.

Conclusão

Os modificadores de acesso do PHP (público, protegido, privado) fornecem um mecanismo para gerenciar a visibilidade e o encapsulamento em OOP. Ao compreender e aplicar esses modificadores corretamente, você pode criar um código mais seguro e de fácil manutenção.

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/ialaminpro/understanding-access-modifiers-in-php-oop-public-protected-and-private-5bah?1 Se houver alguma violação, entre em contato com study_golang@163 .com para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3