Detailed explanation of php abstract class feature examples
Characteristics of abstract class
1. Classes defined as abstract cannot be instantiated.
2. If at least one method in it is declared abstract, then this class must be declared abstract.
3. A method defined as abstract only declares its calling method (parameters) and cannot define its specific function implementation.
4. When inheriting an abstract class, the subclass must define all abstract methods in the parent class (the access control of these methods must be the same as that in the parent class (or more relaxed).)
demo
abstract class AbstractClass{ // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . "\n"; } class ConcreteClass1 extends AbstractClass{ //父类定义了俩个抽象方法,如子类只实现了其中一个,则报如下错误//Fatal error: Class ConcreteClass1 contains 1 abstract //method and must therefore be declared abstract or //implement the remaining methods //(AbstractClass::prefixValue) protected function getValue() { return "ConcreteClass1"; } // 且子类的访问权限不能低于父类,如果将如下子类的访问方式改为private则会报如下错误 //Fatal error: Access level to //ConcreteClass1::prefixValue() must be protected (as in //class AbstractClass) or weaker public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } //当实例化一个抽象类时,Fatal error: Cannot instantiate //abstract class AbstractClass //$obj = new AbstractClass(); // 但是我们可以这么使用########################################################## abstract class Foo{ static function bar() { echo "test\n"; } } Foo::bar();########################################################## $obj = new ConcreteClass1(); echo $obj->getValue();
5. The subclass can define an optional parameter (that is, it must have a default value), but it is not included in the declaration of the abstract method of the parent class, then There is no conflict between the two statements.
abstract class AbstractClass{ // 我们的抽象方法仅需要定义需要的参数 abstract protected function prefixName($name); } class ConcreteClass extends AbstractClass { // 我们的子类可以定义父类签名中不存在的可选参数 // 如果这里的$separator没有默认值,则会报Fatal error: 、、//Declaration of ConcreteClass::prefixName() must be //compatible with that of AbstractClass::prefixName() 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"), "\n"; echo $class->prefixName("Pacwoman"), "\n";
6. An abstract class does not need an abstract method. On the contrary, a class with an abstract method must be declared as an abstract class.
abstract class A{ public function show(){ echo 'A'; } } class B extends A{ public function hello(){ echo 'B'; parent::show(); } } $obj = new B; $obj->hello(); // BA
7. The order in which abstract classes are defined
// 正确的定义顺序 abstract class horse extends animal { public function get_breed() { return "Jersey"; } } class cart extends horse { public function get_breed() { return "Wood"; } } // 错误的定义顺序,将会导致horse类找不到 class cart extends horse { public function get_breed() { return "Wood"; } } abstract class horse extends animal { public function get_breed() { return "Jersey"; } }
8. Abstract methods can be staticmethods
abstract class FOO { abstract static function dump(); } class BAR extends FOO{ static function dump(){var_dump("BAR");} } BAR::dump(); // string(3) "BAR"
9. When an abstract class inherits another abstract class, the abstract method does not need to be declared as abstract
//Fatal error: Can't inherit abstract function //class1::someFunc() (previously declared abstract in //class2)abstract class class1 { abstract public function someFunc(); } abstract class class2 extends class1 { abstract public function someFunc(); } //下面的是正确的 abstract class class1 { abstract public function someFunc(); } abstract class class2 extends class1 { }
The above is the detailed content of Detailed explanation of php abstract class feature examples. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.
