ООП – Абстрактні класи

17.04.2022 0 By svvas

Клас, який містить хоча б один абстрактний метод, має бути визначений як абстрактний. Абстрактні класи реалізують на практиці один із принципів ООП — поліморфізм. Слід пам’ятати, що не можна створити екземпляр абстрактного класу. Методи, оголошені абстрактними, лише описують сенс неспроможні включати реалізації.

При успадкуванні від абстрактного класу, всі методи, позначені абстрактними у батьківському класі, мають бути визначені у класі-нащадку; крім того, область видимості цих методів повинна збігатися (або бути менш суворою). Більше того, контроль типів (розглянуто) і кількість обов’язкових аргументів має бути однаковою.

?php
abstract class AbstClass {
    /* Даний метод потрібно визначити в дочірнім класі */
    abstract protected function getValue();
   
    /* Загальний метод */
    public function printValue() {
        print $this->getValue() . "\n";
    }
}

class FirstClass extends AbstClass
{
    protected function getValue() {
        return "FirstClass";
    }    
}

$class1 = new FirstClass;
$class1->printValue();
?>


// результат виконання
..............
FirstClass

Ключове слово static

Оголошення властивостей та методів класу статичними (static) дозволяє звертатися до них без створення екземпляра класу. Атрибут класу, що оголошений статичним, не може бути доступний за допомогою екземпляру класу (але статичний метод може бути викликаний).

Доступ до статичних властивостей класу може бути отриманий через оператор ::

Починаючи з версії PHP 5.3.0, існує можливість посилатися на клас використовуючи змінну. Тому значення змінної в такому випадку не може бути ключовим словом (наприклад, self, parent і static).

<?php

class FirstClass
{

// статичні властисті
    public static $var1 = "var1";

    public function staticValue() {
        return self::$var1;
    }
}

class SecondClass extends FirstClass
{
    public function var1Static() {
        return parent::$var1;
    }
}

echo FirstClass::$var1; 
?>


// статичні методи

<?php
class FirstClass {
    public static function myStaticMethod() {
        // ...
    }
}

FirstClass::myStaticMethod(); // вызов методу
?>

Comments

comments