Verification: a143cc29221c9be0

Php class методы которых нет

PHP - Что такое абстрактные классы и методы?

Абстрактные классы и методы - это когда родительский класс имеет именованный метод, но ему нужен дочерний класс (классы) для выполнения задач.

Абстрактный класс - это класс, который содержит хотя бы один абстрактный метод. Абстрактный метод - это метод, который объявлен, но не реализован в коде.

Абстрактный класс или метод определяется ключевым словом abstract:

Синтаксис абстрактного класса (метода)

abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

При наследовании от абстрактного класса метод дочернего класса должен быть определен с тем же именем и тем же или с менее модифицированным модификатором доступа. Таким образом, если абстрактный метод определен как защищенный, метод дочернего класса должен быть определен как защищенный или открытый, но не закрытый. Кроме того, тип и количество обязательных аргументов должны быть одинаковыми. Однако дочерние классы могут иметь дополнительные аргументы в дополнение.

Значит, когда дочерний класс наследуется от абстрактного класса, у нас есть следующие правила:

  • Метод дочернего класса должен быть определен с тем же именем, и он повторно объявляет родительский абстрактный метод
  • Метод дочернего класса должен быть определен с таким же или менее ограниченным модификатором доступа
  • Количество обязательных аргументов должно быть одинаковым. Тем не менее, дочерний класс может иметь дополнительные аргументы в добавок

Давайте посмотрим на пример:

Пример

// Родительский класс
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}

// Дочерние классы
class Audi extends Car {
  public function intro() : string {
    return "Choose German quality! I'm an $this->name!";
  }
}

class Volvo extends Car {
  public function intro() : string {
    return "Proud to be Swedish! I'm a $this->name!";
  }
}

class Citroen extends Car {
  public function intro() : string {
    return "French extravagance! I'm a $this->name!";
  }
}

// Создать объекты из дочерних классов
$audi = new audi("Audi");
echo $audi->intro();
echo "
";

$volvo = new volvo("Volvo");
echo $volvo->intro();
echo "
";

$citroen = new citroen("Citroen");
echo $citroen->intro();
?>

Попробуйте сами »

Объяснение примера

Классы Audi, Volvo и Citroen унаследованы от класса Car. Это означает, что классы Audi, Volvo и Citroen могут использовать публичное свойство $name, а также публичный метод __construct() из класса Car из-за наследования.

Но intro() - это абстрактный метод, который должен быть определен во всех дочерних классах, и они должны возвращать строку.


Предопределенные константы

Предопределённые константы используются для получения информации о вашем коде. Имя такой константы пишется заглавными буквами между сдвоенными подчеркиваниями, например,  __LINE__ и __FILE__ . Вот несколько полезных предопределённых констант, доступных в PHP:

  • __LINE__ возвращает номер строки в исходном файле, где используется константа:
  • __FILE__ представляет имя файла, включая полный путь:
  • __DIR__ представляет только путь к файлу:
  • __CLASS__ представляет имя текущего класса:
  • __FUNCTION__ представляет имя текущей функции:
  • __METHOD__ представляет имя текущего метода:
  • __NAMESPACE__ представляет имя текущего пространства имен:

Цепочка наследования

В отличие от интерфейсов, наследование классов в PHP – одиночное. Другими словами, наследоваться можно только от одного класса. Точно так же как и в Java. Множественное наследование в этих языках было убрано специально, из-за его высокой сложности и проблем, которые оно добавляет (например, коллизии методов и свойств). С другой стороны, сама по себе цепочка наследования может быть сколь угодно глубокой:

class D {}
class C extends D {}
class B extends C {}
class A extends B {}