Класс, который содержит хотя бы один абстрактный метод, должен быть определен как абстрактный. Абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Нужно помнить, что нельзя создать экземпляр абстрактного класса. Методы, объявленные абстрактными, лишь описывают смысл и не могут включать реализации.
При наследовании от абстрактного класса, все методы, помеченные абстрактными в родительском классе, должны быть определены в классе-потомке; кроме того, область видимости этих методов должна совпадать (или быть менее строгой). Более того, контроль типов (будет рассмотрено) и количество обязательных аргументов должно быть одинаковым.
Пример абстрактного класса:
<?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::$my_static;
}
}
echo FirstClass::$my_static;
?>
Пример статического метода
<?php
class FirstClass {
public static function myStaticMethod() {
}
}
FirstClass::myStaticMethod();
?>