«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Понимание модификаторов доступа в ООП PHP: общедоступный, защищенный и частный

Понимание модификаторов доступа в ООП PHP: общедоступный, защищенный и частный

Опубликовано 8 ноября 2024 г.
Просматривать:300

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

В объектно-ориентированном программировании PHP (ООП) модификаторы доступа управляют видимостью свойств и методов класса. Основными модификаторами доступа в PHP являются общедоступный, защищенный и частный.

Эта статья расскажет вам о назначении и использовании этих модификаторов доступа и объяснит, как эффективно их применять в ООП PHP.

1. Модификатор публичного доступа

  • Ключевое слово: public
  • Видимость: Доступно откуда угодно — внутри класса, вне класса и в производных классах.
  • Сценарий использования: используйте public для свойств или методов, которые должны быть доступны из любого контекста.

Пример:

class User {
    public $name = "John";

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

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

В этом примере и свойство $name, и метод Greeting() являются общедоступными, что позволяет обращаться к ним напрямую извне класса.

2. Модификатор защищенного доступа

  • Ключевое слово: защищено
  • Видимость: Доступен внутри самого класса и для подклассов (дочерних классов), но не доступен снаружи класса.
  • Сценарий использования: используйте protected, чтобы позволить производным классам получать доступ к определенным свойствам или методам, сохраняя их скрытыми от внешнего кода.

Пример с правильным доступом:

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

В этом примере getAge() — это защищенный метод, доступный в классе «Сотрудник», подклассе «Человек».

Пример с ошибкой:

class Person {
    protected $age = 30;

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

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

Сообщение об ошибке: Неустранимая ошибка: неперехваченная ошибка: невозможно получить доступ к защищенному методу Person::getAge()

В этом случае попытка доступа к защищенному методу getAge() непосредственно из экземпляра Person приводит к ошибке, поскольку защищенные методы недоступны извне класса.

3. Модификатор частного доступа

  • Ключевое слово: личное
  • Видимость: доступно только внутри класса, в котором он определен. Недоступно из подклассов или внешнего кода.
  • Случай использования: используйте Private, чтобы скрыть свойства или методы из любого кода вне класса, включая производные классы.

Пример с правильным доступом:

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

В этом примере метод getBalance() является закрытым, поэтому доступ к нему возможен только внутри класса BankAccount. Метод showBalance() является общедоступным и может использоваться для косвенного доступа к частному методу getBalance().

Пример с ошибкой:

class BankAccount {
    private $balance = 1000;

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

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

Сообщение об ошибке: Неустранимая ошибка: необнаруженная ошибка: невозможно получить доступ к частному методу BankAccount::getBalance()

В этом случае попытка доступа к закрытому методу getBalance() непосредственно из экземпляра BankAccount приводит к ошибке, поскольку частные методы недоступны извне класса.

Пример с ошибкой в ​​подклассе:

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();

Сообщение об ошибке: Неустранимая ошибка: необнаруженная ошибка: невозможно получить доступ к частному методу BankAccount::getBalance()

Здесь частный метод getBalance() недоступен даже для таких подклассов, как SavingsAccount, что демонстрирует, что к частным методам нельзя получить доступ за пределами их определяющего класса.

4. Краткое описание модификаторов доступа

Модификатор Внутри класса Производный класс Вне класса
Публикация Да Да Да
Защищено Да Да Нет
Частный Да Нет Нет

5. Лучшие практики

  • Используйте public экономно, чтобы показывать только то, что необходимо. Предпочитайте инкапсуляцию и раскрывайте функциональность через общедоступные методы.
  • Используйте protected, чтобы разрешить подклассам доступ к необходимым свойствам или методам, скрывая их от внешнего кода.
  • Используйте private для полной инкапсуляции внутреннего содержимого класса и предотвращения доступа извне или производных классов.

Заключение

Модификаторы доступа PHP (открытый, защищенный, частный) предоставляют механизм управления видимостью и инкапсуляцией в ООП. Поняв и правильно применив эти модификаторы, вы сможете создать более безопасный и удобный в сопровождении код.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/ialaminpro/understanding-access-modifiers-in-php-oop-public-protected-and-private-5bah?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163. .com, чтобы удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3