Заполните таблицу правильными значениями.
Мы узнали о трех модификаторах управления доступом (public, private и protected), которые мы используем, чтобы разрешить / ограничить доступ к коду.
В следующей таблице мы будем использовать символ «V», чтобы отметить, что к коду можно получить доступ с определенного уровня, и «X», если он недоступен.
Заполните таблицу правильными значениями.
Например, к публичному коду можно получить доступ изнутри класса, из кода внутри дочерних классов и из глобальной области видимости, в то время как к приватному коду нельзя получить доступ из глобальной области видимости (*).
Модификатор | Класс | Дочерний класс | Глобальная область * |
---|---|---|---|
Public |
|
|
|
Protected |
| ||
Private |
|
|
(*) Глобальная область видимости находится за пределами классов.
Модификатор | Класс | Дочерний класс | Глобальная область |
---|---|---|---|
Public Публичный |
|
|
|
Protected Защищеный |
|
|
|
Private Приватный |
|
|
|
Доступ к публичным методам и свойствам можно получить из любого места кода.
Доступ к защищенным методам и свойствам можно получить только из класса и его дочерних классов.
Доступ к приватным методам и свойствам можно получить только из самого класса.
Упражнения по кодированию
В следующем примере мы создадим класс Admin, который является дочерним классом класса User.
Создайте пользовательский класс User.
Блокнот, чтобы попрактиковаться в кодировании *Этот код не сохраняется и никуда не отправляется*
//Ваш код
Добавьте в класс приватное свойство с именем $username.
Блокнот, чтобы попрактиковаться в кодировании *Этот код не сохраняется и никуда не отправляется*
//Ваш код
Создайте метод, который может устанавливать значение свойству $username.
Блокнот, чтобы попрактиковаться в кодировании *Этот код не сохраняется и никуда не отправляется*
//Ваш код
Создайте класс Admin, который наследует класс User.
Блокнот, чтобы попрактиковаться в кодировании *Этот код не сохраняется и никуда не отправляется*
//Ваш код
Теперь давайте добавим в класс Admin немного кода. Сначала добавьте публичный метод с именем expressYourRole(), затем сделайте так, чтобы он возвращал название класса т.е. строку: "Admin".
Блокнот, чтобы попрактиковаться в кодировании *Этот код не сохраняется и никуда не отправляется*
//Ваш код
Добавьте в класс Admin ещё один публичный метод sayHello(), который возвращает строку "Hello admin, XXX" с именем пользователя вместо XXX.
Блокнот, чтобы попрактиковаться в кодировании *Этот код не сохраняется и никуда не отправляется*
//Ваш код
Создайте объект $admin1 из класса Admin
- задайте ему имя "Vasya" и поздоровайтесь с пользователем.
Вы видите какие-нибудь проблемы?
Ожидаемый результат:
Notice: Undefined property: Admin::$username
Блокнот, чтобы попрактиковаться в кодировании *Этот код не сохраняется и никуда не отправляется*
//Ваш код
Как вы думаете, в чем причина проблемы, возникшей в предыдущем задании?
Причина проблемы в том, что мы пытаемся получить доступ к приватной переменной $username извне класса.
Блокнот, чтобы попрактиковаться в кодировании *Этот код не сохраняется и никуда не отправляется*
//Ваш код
Измените код так, чтобы устранить вышевыявленную проблему.
Ожидаемый результат:
Hello admin, Vasya
Блокнот, чтобы попрактиковаться в кодировании *Этот код не сохраняется и никуда не отправляется*
//Ваш код
Попробуйте написать решение с помощью метода получения (getter) внутри родительского класса, который можно использовать из дочернего класса.
Ожидаемый результат:
Hello admin, Vasya
Блокнот, чтобы попрактиковаться в кодировании *Этот код не сохраняется и никуда не отправляется*
//Ваш код
Вам понравился этот урок?
А хотите стать востребованным специалистом "PHP, Laravel, Symfony..." и получить востребованную профессию?
Вы получите профессию своей мечты, помощь в трудоустройстве в компаниях-партнёрах.
Не теряйте время зря!
Нажмите зеленую кнопку, чтобы заглянуть в будущее и начать раскрывать свой потенциал уже сегодня!
Комментарии
<code>
, несколько строчек кода — в теги<pre><code>
...ваш код...</code></pre>
.