Intereting Posts
Использовать filter_var () для проверки даты? PHP Websocket аутентифицирует пользователя в тесте (pass session cookie) MySQL: определение основного ключа таблицы динамически Присоедините две таблицы mysql с php Пользовательские перехватчики в WordPress через плагины Могу ли я использовать точку и обратную косую черту вместо dirname ()? как вставить несколько значений флажка в базу данных, используя php Сортировка только первого элемента в многоадресном массиве на основе идентификатора antoher в массиве (PHP) symfony2 – добавление выбора из базы данных как перенаправить в подпапку, а затем переписать ссылку вложенной папки на root в htaccess? Пользовательское сообщение о заполненном статусе уведомления о статусе заказа только для роли пользователя Когда нужно обернуть фигурные скобки вокруг переменной Array_values ​​из многомерного массива установка композитора на общем хосте Добавление в базу данных. Нет повторения при обновлении

Что такое абстрактный класс в php?

Что такое абстрактный класс в php? Где его можно использовать?

Related of "Что такое абстрактный класс в php?"

Абстрактным классом является класс, который содержит хотя бы один абстрактный метод, который представляет собой метод без какого-либо реального кода в нем, просто имя и параметры и который был помечен как «абстрактный».

Целью этого является предоставление типа шаблона для наследования и принудительного наследования класса для реализации абстрактных методов.

Таким образом, абстрактный класс представляет собой нечто среднее между обычным классом и чистым интерфейсом. Также интерфейсы представляют собой особый случай абстрактных классов, где ВСЕ методы абстрактны.

См. Этот раздел руководства по PHP для дальнейшей справки.

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

1. Невозможно создать экземпляр абстрактного класса : классы, определенные как абстрактные, не могут быть созданы, и любой класс, содержащий хотя бы один абстрактный метод, также должен быть абстрактным.

Пример:

abstract class AbstractClass { abstract protected function getValue(); abstract protected function prefixValue($prefix); public function printOut() { echo "Hello how are you?"; } } $obj=new AbstractClass(); $obj->printOut(); //Fatal error: Cannot instantiate abstract class AbstractClass 

2. Любой класс, содержащий хотя бы один абстрактный метод, также должен быть абстрактным : абстрактный класс может иметь абстрактные и не абстрактные методы, но должен содержать хотя бы один абстрактный метод. Если класс имеет хотя бы один абстрактный метод, то класс должен быть объявлен абстрактным.

Примечание. Черты поддерживают использование абстрактных методов, чтобы наложить требования к классу экспонирования.

Пример:

 class Non_Abstract_Class { abstract protected function getValue(); public function printOut() { echo "Hello how are you?"; } } $obj=new Non_Abstract_Class(); $obj->printOut(); //Fatal error: Class Non_Abstract_Class contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Non_Abstract_Class::getValue) 

3. Абстрактный метод не может содержать тело . Методы, определенные как абстрактные, просто объявляют подпись метода – они не могут определить реализацию. Но не абстрактный метод может определить реализацию.

 abstract class AbstractClass { abstract protected function getValue(){ return "Hello how are you?"; } public function printOut() { echo $this->getValue() . "\n"; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."\n"; //Fatal error: Abstract function AbstractClass::getValue() cannot contain body 

4. При наследовании от абстрактного класса все методы, помеченные как абстрактные в объявлении класса родителя, должны быть определены дочерним : если вы наследуете абстрактный класс, вы должны предоставить реализации всем абстрактным методам в нем.

 abstract class AbstractClass { // Force Extending class to define this method abstract protected function getValue(); // Common method public function printOut() { print $this->getValue() . "<br/>"; } } class ConcreteClass1 extends AbstractClass { public function printOut() { echo "dhairya"; } } $class1 = new ConcreteClass1; $class1->printOut(); //Fatal error: Class ConcreteClass1 contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (AbstractClass::getValue) 

5. То же (или менее ограниченное) видимость : при наследовании от абстрактного класса все методы, помеченные как абстрактные в объявлении класса родителя, должны определяться дочерним элементом; кроме того, эти методы должны быть определены с той же (или менее ограниченной) видимостью. Например, если абстрактный метод определяется как защищенный, реализация функции должна быть определена как защищенная или общедоступная, но не закрытая.

Обратите внимание, что абстрактный метод не должен быть закрытым.

 abstract class AbstractClass { abstract public function getValue(); abstract protected function prefixValue($prefix); public function printOut() { print $this->getValue(); } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."<br/>"; //Fatal error: Access level to ConcreteClass1::getValue() must be public (as in class AbstractClass) 

6. Подписи абстрактных методов должны совпадать : при наследовании от абстрактного класса все методы, помеченные как абстрактные в объявлении класса родителя, должны быть определены дочерним элементом, подписи методов должны совпадать, т. Е. Типы подсказок и количество требуемых аргументы должны быть одинаковыми. Например, если дочерний класс определяет необязательный аргумент, где подпись подписи абстрактного метода отсутствует, в подписи нет конфликта.

 abstract class AbstractClass { abstract protected function prefixName($name); } class ConcreteClass extends AbstractClass { public function prefixName($name, $separator = ".") { if ($name == "Pacman") { $prefix = "Mr"; } elseif ($name == "Pacwoman") { $prefix = "Mrs"; } else { $prefix = ""; } return "{$prefix}{$separator} {$name}"; } } $class = new ConcreteClass; echo $class->prefixName("Pacman"), "<br/>"; echo $class->prefixName("Pacwoman"), "<br/>"; //output: Mr. Pacman // Mrs. Pacwoman 

7. Абстрактный класс не поддерживает множественное наследование : абстрактный класс может расширять другой абстрактный класс, абстрактный класс может обеспечить реализацию интерфейса. Но он не поддерживает множественное наследование.

 interface MyInterface{ public function foo(); public function bar(); } abstract class MyAbstract1{ abstract public function baz(); } abstract class MyAbstract2 extends MyAbstract1 implements MyInterface{ public function foo(){ echo "foo"; } public function bar(){ echo "bar"; } public function baz(){ echo "baz"; } } class MyClass extends MyAbstract2{ } $obj=new MyClass; $obj->foo(); $obj->bar(); $obj->baz(); //output: foobarbaz 

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

ниже пример приведет к фатальной ошибке: класс «лошадь» не найден

 class cart extends horse { public function get_breed() { return "Wood"; } } abstract class horse extends animal { public function get_breed() { return "Jersey"; } } abstract class animal { public abstract function get_breed(); } $cart = new cart(); print($cart->get_breed()); 

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

Здесь есть хорошее объяснение.

Ссылка: абстрактный класс в Php и oops

  • Абстрактный класс содержит только объявление подписи метода, они не могут определить реализацию.
  • Класс абстракции определяется с помощью абстрактного ключевого слова.
  • Абстрактный класс не может реализовать множественное наследование .
  • Последняя версия PHP 5 представляет абстрактные классы и методы.
  • Классы, определенные как абстрактные, мы не можем создать объект (может не создаваться)

http://www.codingslover.com/2015/07/abstract-class-in-php.html

Абстрактный класс
1. Содержит абстрактный метод
2. Нельзя напрямую инициализировать
3. Невозможно создать объект абстрактного класса
4. Используется только для целей наследования

Абстрактный метод
1. Не может содержать тело
2. Нельзя определить как частный
3. В дочерних классах должны быть определены методы, объявленные в абстрактном классе

Пример кода:

 abstract class A { public function test1() { echo 'Hello World'; } abstract protected function f1(); abstract public function f2(); protected function test2(){ echo 'Hello World test'; } } class B extends A { public $a = 'India'; public function f1() { echo "F1 Method Call"; } public function f2() { echo "F2 Method Call"; } } $b = new B(); echo $b->test1() . "<br/>"; echo $b->a . "<br/>"; echo $b->test2() . "<br/>"; echo $b->f1() . "<br/>"; echo $b->f2() . "<br/>"; 

Вывод:

 Hello World India Hello World test F1 Method Call F2 Method Call