Page 69 - 4636
P. 69

Доступ до констант класу здійснюється з допомогою операції : :  і зазначення  імені  класу,  якому
        константа належить.
           Реалізація статичних методів
           У  РНР  є  ключове  слово  static.  Воно  застосовується  до  методів,  дозволяючи  викликати їх  без
        необхідності  створення  екземпляра  класу.  Ідея  статичних  методів  подібна  ідеї  констант  класу.
        Наприклад,  повернемося  ще  раз  до  класу  Math,  який  згадувався  в  попередньому  прикладі.  Ви
        можете  додати  до  нього  статичний  метод  squared()  і  викликати  його,  не  створюючи  екземпляр
        класу:
           class Math (static function squared($input) { return
           $input*$input;}}echo Math:: squared(8);
           Зверніть увагу, що всередині статичного методу можна використовувати ключове слово this,
        оскільки не може існувати жодного примірника для посилання.
           Перевірка типу об'єкта і вказівка типів
           Ключове слово instanceof дозволяє перевірити тип об'єкта. Ви можете перевірити, чи є об'єкт
        примірником заданого класу, успадкований він від певного класу чи реалізує він деякий інтерфейс. Це
        ключове слово фактично являє собою умовну операцію. Беручи до уваги попередні приклади, в яких
        клас був реалізований як підклас класу А, розглянемо такі приклади використання instanceof:
               ($b instanceof В) в результаті дає true;
               ($b instanceof А) в результаті дає true;
               ($b instanceof Displayable) в результаті дає false.
           У  всіх  цих  прикладах  передбачається,  що  А,  В  і  Displayable  перебувають  в  поточній  області
        видимості; в іншому випадку виникне помилка. Крім того, в РНР5 можлива вказівка типів. Зазвичай
        при  передачі  параметра  в  PHP-функцію  тип  цього  параметра  не  вказується.  З  допомогою  вказівки
        типів  можна  задати  тип  класу,  який  повинен  передаватися,  і  якщо  тип  фактичного  параметра  не
        збігається  з  ним,  генерується  помилка.  Перевірка  типів  еквівалентна  instanceof.  Наприклад,
        припустимо, що є така функція:
           function checkhint ($someclass){//...}
           У  цій  функції  зазначено,  що  параметр  $someclass  повинен  бути  екземпляром  класу  В.  Якщо
        передати  у  функцію  екземпляр  класу  А,  тобто:  check_hint($а);буде  отримана  наступна
        фатальна помилка: Fatal error: Argument 1 must be an instance of В.
           Фатальна помилка: Аргумент 1 примірником повинен бити В. Слід зазначити, що якщо вказати
        параметр типу класу А, потім передати у функцію екземпляр класу В, помилка не виникне, оскільки В
        успадкований від А.
           Пізнє статичне зв'язування
           Пізніше  статичне  зв'язування,  яке  з'явилося  у  версії  РНР  5.3,  дозволяє  робити  посилання  на
        викликаний  клас  у  контексті  статичного  спадкування;  батьківські  класи  можуть  використовувати
        статичні методи, перевизначені дочірніми класами. Наступний простий приклад з РНР демонструє дію
        пізнього статичного зв'язування:
           <?php
           class А {
           public static function who() {
           echo__CLASS__ ;}public static function test(){
           static:: who(); // Тут виконується пізніше статичне зв'язування }}class
           extends А {
           public static function who() {
           echo__CLASS__ ; }}B: :test () ;?>
           Цей приклад дає такий висновок: дозвіл посилань на класи, що викликаються під час виконання,
        незалежно від того, перевизначені вони чи ні, пропонує додаткові можливості.
           Клонування об'єктів
           У  РНР  можна  також  використовувати  ключове  слово  clone,  яке  дозволяє  копіювати  існуючі
        об'єкти.  Наприклад,  оператор:$с  =  clone  $b;  створює  копію  об'єкта  $b  того ж  самого  класу  з
                                                            66
   64   65   66   67   68   69   70   71   72   73   74