Page 58 - 4636
P. 58

}
           }
           Цей  код  надає  мінімальні  функції  для  доступу  до  атрибуту  по  імені  $attribute.  Функція
        __get() просто повертає значення атрибута $attribute, афункція __set() присвоює йому нове
        значення. Зверніть увагу, що функція __get() приймає один параметр - ім'я атрибута - і повертає
        значення цього атрибута. Аналогічно, функція __set() приймає два параметри - ім'я атрибута і нове
        значення,  яке  має  бути  йому  присвоєно.  Ці  функції  не  викликаються  безпосередньо.  Два  символи
        підкреслення початку імен функцій означають, що вони мають у РНР спеціальне призначення подібно
        до  функцій  __construct()  і  __destruct().Розглянемо,  як  працюють  ці  функції.  Якщо  ви
        створюєте екземпляр класу:$а=new classname();можете використовувати функції __get () і __set
        () для перевірки і установкизначення будь-якого атрибута. Оператор $a->$attribute=5; призведе
        до  неявного  виклику  функції  __set()  з  передачею  їй  значення  "attribute"у  параметрі  $name  і  5
        значення в параметрі $value. Всередині функції __set() можутьзнаходитися необхідні перевірки
        на  помилкові  значення.  Функція  __get()  працює  аналогічним  чином.  Якщо  десь  у  коді  наявне
        посилання  на  атрибут:  $a->$attributeто  здійснюється  неявний  виклик  функції  __get()  з
        передачею їй значення"attribute" в параметрі $name. Це призведе до повернення функцією __get()
        значення  атрибута.  На  перший  погляд  може  здатися,  що  від  цього  коду  зовсім  небагато  користі.
        Можливо,  що  в  тому  вигляді,  в  якому  він  тут  наведений,  це  так  і  є,  проте  причина  застосування
        функцій доступу пояснюється просто: звернення до конкретного атрибуту виконується через всього
        лише  один  розділ  коду.  За  наявності  тільки  однієї  точки  доступу  можна організувати  перевірку  на
        допустимість, щоб гарантувати, що зберігаються лише дані, що мають сенс. Якщо згодом з'ясується,
        що значення атрибута $attribute може бути тільки в діапазоні між 0 і 100, можна тільки один раз
        додати  кілька  рядків  коду  і  реалізувати  перевірку  перед  тим,  як  дозволити  зміну.  Тепер  функції
        __set()можна надати такий вигляд:
           functionset($name, $value) {
           if( $name="attribute" && $value >= 0 S& Svalue <= 100 )
           $this->attribute = $value;
           }
           Маючи  єдину  точку  доступу,  ми  отримуємо  можливість  легко  вносити  зміни  в  лежачу  в  основі
        реалізацію. Якщо з якоїсь причини ми вирішимо змінити спосіб збереження атрибута $attribute,
        функції  доступу  дозволяють  зробити  це,  змінивши  код  тільки  в  одному  місці.  Може  виникнути
        необхідність замість зберігання $attribute  у вигляді змінної витягати її з бази даних, коли вона
        знадобиться, обчислювати поточне значення при кожному запиті, обчислювати різні значення па базі
        значень  інших  атрибутів  або  кодувати  дані  у  вигляді  більш  короткого  типу  даних.  Будь-яке
        редагування  не  потрібно,  достатньо  лише  відповідним  чином  модифікувати  функції  доступу.  Інші
        розділи програми не будуть порушені, якщо брати і повертати дані, очікувані в інших частинах коду,
        будуть функції доступу.
           Управління доступом за допомогою модифікаторів private і public
           У  РНР  застосовують  модифікатори  доступу,  які  керують  видимістю  атрибутів  і  методів.
        Модифікатор доступу вказується перед оголошенням атрибута або методу. РНР5 підтримує такі три
        різні модифікатори доступу:
               модифікатор  доступу  public  (загальнодоступний)  встановлюється  за  замовчуванням,  тобто
        мається на  увазі при відсутності модифікатора доступу. Такі елементи доступні як зсередини, так  і
        ззовні класу;
               модифікатор  доступу  private  (приватний)  означає,  що  позначений  ним  елемент  може  бути
        доступний  тільки  зсередини  класу.  Його  можна  застосовувати  длявсіх  атрибутів,  якщо  не
        використовуються  функції  доступу  __get()  і  __set().Щодо  методів  даний  модифікатор
        вказується, якщо той чи інший метод є службовим і призначеним тільки для внутрішніх цілей класу.
        Приватні  елементи  не  успадковуються  (більш  докладно  про  спадкування  розповідається  далі  в  цій
        лекції);

                                                            55
   53   54   55   56   57   58   59   60   61   62   63