В предыдущем уроке мы рассмотрели конструкторы и деструкторы в PHP. Следующим пунктом идет рассмотрение абстрактных классов и ключевых слов static и final.
В чем разница между обычными классами и абстрактными? Разница между «обычным» и абстрактным классом заключается в том, что абстрактный класс может быть унаследован, но нельзя создать его экземпляр (не может быть инстанцирован). Он также может содержать абстрактные методы. Это методы без какого-либо реального кода в них. В таких классах вы используете только ключевое слово abstract, название метода и параметры.
Этой особенностью абстрактный класс сильно похож на интерфейс класса. Практическая польза от использования абстрактного класса заключается в том, что вы можете создать что-то вроде «шаблона». Затем другие классы могут использовать этот «шаблон» или наследовать его. Это обяжет классы реализовывать абстрактные методы, которые вы объявили внутри абстрактного класса.
Необходимо запомнить две важные вещи, связанные с методами, объявленными внутри абстрактного класса. Во-первых, когда класс наследуется от абстрактного класса, он должен реализовать все его абстрактные методы. Во-вторых, абстрактные методы могут использоваться только в абстрактных классах.
<?php
abstract class Sobaka {
abstract public function golos();
}
class Buldog extends Sobaka {
public function golos() {
echo "Gav";
}
}
$reks = new Buldog();
$reks->golos(); // Gav
?>
Следующая вещь, которая довольно часто встречается в PHP-классах, это два ключевых слова static и final. Первое ключевое слово (static) определяет свойства и методы класса, к которым можно получить доступ, не создавая новый объект или экземпляр этого класса. Как получить доступ к любому статическому свойству или методу? Вы должны использовать оператор :: (двойное двоеточие). Это то, что называется оператором разрешения области видимости. Вы вставляете его между именем класса и именем свойства или метода.
<?php
class Sobaka {
static $vozrast = 7;
static function golos() {
echo "Gav";
}
}
// получаем доступ к статическому свойству $vozrast
echo Sobaka::$vozrast; // 7
// получаем доступ к статическому методу golos()
Sobaka::golos(); // Gav
?>
Если вам нужно получить доступ к статическому свойству из статического метода, вам нужно использовать другое ключевое слово self.
<?php
class Chelovek {
static $vozrast = 35;
static function vozrastCheloveka() {
// получаем доступ к статическому свойству $vozrast
echo self::$vozrast;
}
}
// получаем доступ к статическому методу vozrastCheloveka()
Chelovek::vozrastCheloveka(); // 35
?>
Второе ключевое слово – final. Это ключевое слово определяет методы, которые нельзя переопределить в дочерних классах. Вы также можете использовать это ключевое слово при объявлении новых классов. Классы, которые вы объявили с помощью ключевого слова final, не могут быть унаследованы. Давайте рассмотрим простой пример того, как изменить final метод и унаследовать final класс.
<?php
class Chelovek {
final function identifikaciya() {
echo "Human";
}
}
// создадим дочерний класс с названием Man и попробуйте переопределить метод identifikaciya()
class Man extends Chelovek {
function identifikaciya() {
echo "Man"; // Fatal error: Cannot override final method Chelovek::identifikaciya()
}
}
// создадим новый final класс Chelovek
final class Chelovek {}
// попробуем унаследовать класс от final класса Chelovek
class Man extends Chelovek {} // Fatal error: Class Man may not inherit from final class (Chelovek)
?>
На сегодня все! В последующих статьях мы будем рассматривать более углубленные вещи языка программирования PHP.
WordPress годами был непревзойденным "монолитом": он отвечал и за удобную админ-панель, и за хранение данных,…
В мире веб-серверов часто говорят о противостоянии Nginx vs Apache. Но что, если бы я…
Когда я начинал свой путь в веб-разработке, вопрос "какой веб-сервер использовать?" практически не стоял. Ответ…
Когда речь заходит о веб-серверах, два имени всегда на слуху: Apache и Nginx. Apache —…
В мире веб-разработки мы постоянно сталкиваемся с проблемой: "А у меня на компьютере все работает!".…
На заре моей карьеры веб-разработчика все было относительно просто: установил локальный сервер (помните Denwer?), положил…