php

Константы, абстракции, интерфейсы

Перебор свойств объекта

Мы можем перебрать свойства объекта в цикле foreach.

class Human {
public $name;
public $yearOfBorn;
function __construct($name, $yearOfBorn){
$this->name = $name;
$this->yearOfBorn = $yearOfBorn;}}
$billGates = new Human(‘Bill Gates’,1955);
foreach($billGates as $name=>$value){
print($name.’: ’.$value.’
’);}

В последнюю строку мы закинули объект, туда придет свойство и значение.

Константы класса

У класса есть свои константы. Они создаются при помощи ключевого слова const. Значение константы класса постоянное, изменять его нельзя. Т.к. это константы класса, то они не принадлежат ни одному объекту. Поэтому через конструкцию $this мы к ней обратиться не можем. Но есть два пути:

  • Если мы обращаемся к константе класса из кода вне класса — CLASS::KONSTANTA.
  • Если мы хотим обратиться к контанте из класса — self::KONSTANTA.
class Human {
const HANDS = 2;
function printHands(){
print (self::HANDS);// NOT $this!
}}
print ('Количество рук: '.Human::HANDS);

Абстрактные методы и классы

Абстракция — это, по сути, совокупность каких-то значительных вещей. Мы можем объявить класс абстрактным, указав перед ним ключевое слово abstract.

abstract class Car { //абстрактный класс
public $petrol;
function startEngine(){
print('Двигатель завѐлся!');}
abstract function stopEngine();} //абстрактный метод
class InjectorCar extends Car {
public function stopEngine(){
print('Двигатель остановился!');
}}
$myMegaCar = new Car();//Ошибка!
$myMegaCar = new InjectorCar();
$myMegaCar->startEngine();
$myMegaCar->stopEngine();

От абстрактного класса нельзя напрямую создавать объекты (см. строку кода №10). Если мы хотим использовать абстрактный класс, мы должны создать под него какой-то класс-наследник. И уже от этого класса создаем объект.

Т.е. абстрактный класс — это ‘набросок’, шаблон, который можно дополнять.

В классе могут быть и абстрактные методы. Абстрактный метод задается ключевым словом abstract перед именем метода. Это метод без реализации, у него нет фигурных скобок (см строка №5), только его объявление. По сути, это тот же набросок, т.е. я подготавливаю класс, делаю набросок, говорю: там будет абстрактный класс такой-то, потом другой и т.д. Абстрактный метод обязательно должен быть перегружен в классе-наследнике (см. строка №7), иначе выскочит ошибка.

Интерфейсы

Наряду с абстрактным классов, есть еще один вид абстрактного класса — интерфейс. Это тот же самый абстрактный класс, но который содержить только абстрактные методы. Т.е. там нет свойств, нет обычных методов. Пример интерфейса:

interface Hand { //первый интерфейс
function useKeyboard(); //слово abstract опускается
function touchNose();
}
interface Foot { //второй интерфейс
function runFast();
function playFootball();
}

От интерфейса нельзя создавать никаких объектов (так же, как и от абстрактного класса). Наследование от интерфейса происходит при помощи ключевого слова implements.

class Human implements Hand, Foot
{
public function useKeyboard(){
echo 'Use keyboard!';}
public function touchNose(){
echo 'Touch nose!';}
public function runFast(){
echo 'Run fast!';}
public function playFootball(){
echo 'Play football!';}
}

Мы можем унаследовать класс от нескольких интерфейсов (см. код выше строка №1). Ниже — перегружаем все методы от унаследованных классов (строки №3-11).




Добавить комментарий

Ваш e-mail не будет опубликован.