PHP 多重继承
什么是多重继承
多重继承是面向对象编程中的四个支柱之一,由子类从多个父类中继承特性。
在建立子类和父类之间的关系后,这些类可以重复使用从父类继承的代码,使用多重继承可以提高编译速度,减少开发时间,并提供更高的准确性。
面向对象编程
- 面向对象编程(OOP)是一种结构化编程方法,它使用数据和对象而不是函数和逻辑来组织代码块。
- 对象: 对象是具有特定特性和功能集的数据字段。
- 面向对象编程主要关注开发人员创建的数据对象,而不是关注操纵对象所需的逻辑。
- 这种编程类型非常适用于具有非常复杂的数据,需要定期更新或彻底维护的程序。
- 面向对象编程的一些其他优势包括代码可重用性、可扩展性和效率。
- OOP的主要原则包括:
- 数据封装
- 数据抽象
- 继承
- 多态性
PHP中的多重继承
PHP没有多重继承的属性,但我们仍然可以通过使用PHP提供的界面或特征和类来使用多重继承。
特征和接口是单一继承的编程语言(如PHP)的特殊特性,无法实现多重继承。特征帮助开发人员减少PHP的单一继承属性的限制,并在层次结构中不同的类中自由重用代码。特征与类几乎相似,但它们一直以一致的功能组合在一起,不同于类。由于无法单独初始化特征,因此必须在类中使用。我们可以说特征是一种类的类型,通过同时使用多个特征,帮助开发人员实现多重继承。
特征(使用类和特征)
语法:
Class parent - class {
Statement . . .
. . . . . . . .
. . . . . . . .
}
Trait - name {
Statement . . .
. . . . . . . .
. . . . . . . .
}
Class child - class extends parent - class {
use trait - name;
Statement . . .
. . . . . . . .
. . . . . . . .
}
示例:
<?php
class parentClass {
public function parentFunction() {
echo " Hello this is a parent class ";
}
}
trait forParentClass {
public function traitFunction() {
echo " and this is trait ";
}
}
class childClass extends parentClass {
use forParentClass;
public function childFunction() {
echo " this is the child class which inherit parent using trait ";
}
}
obj = new childClass(); obj -> parentFunction();
obj -> traitFunction(); obj -> childFunction();
?>
输出:
在以上程序中,我们有一个包含容量 父类函数() 的父类,并且我们有一个名为 父类 的质量,它持有名为 路径函数() 的容量。最终,我们有一个名为子类的青年类,其具有 子类函数() 的工作,并通过使用条件获得了父类的质量。此外,为了访问类和质量,我们创建了一个名为obj的对象,并使用相同的对象调用每个函数。
特征(使用多个特征)
除了使用类与特征,还有一种使用多重继承的方法是使用多个特征。
语法:
Trait first - trait {
Statement . . .
. . . . . . . .
. . . . . . . .
}
Trait second - trait {
Statement . . .
. . . . . . . .
. . . . . . . .
}
Class child - class e {
use first - trait;
use second - trait;
Statement . . .
. . . . . . . .
. . . . . . . .
}
示例:
<?php
trait firstTrait {
public function firsttrait() {
echo " Hello this is a trait ";
}
}
trait forFirstTrait {
public function secondtrait() {
echo " and this is second trait ";
}
}
class childClass {
use firstTrait;
use forFirstTrait;
public function childFunction() {
echo " this is the child class which inherit parent traits ";
}
}
obj = new childClass(); obj -> firsttrait();
obj -> secondtrait(); obj -> childFunction();
?>
输出:
接口(使用类和接口)
语法:
Class parent - class {
Statement . . .
. . . . . . . .
. . . . . . . .
}
Interface interface - name {
Statement . . .
. . . . . . . .
. . . . . . . .
}
Class child - class extends parent - class impliments interface - name {
Statement . . .
. . . . . . . .
. . . . . . . .
}
示例:
<?php
class parentClass {
public function parentFunction() {
echo "this is parent class";
}
}
interface firstInterface {
public function interfaceFunction();
}
class childClass extends parentClass implements firstInterface {
function interfaceFunction() {
echo " this is interface ";
}
public function childFunction() {
echo " this is an inherited child class using an interface ";
}
}
obj = new childClass(); obj -> parentFunction();
obj -> interfaceFunction(); obj -> childFunction();
?>
输出:
在上述程序中,我们有一个包含容量父函数()的父类。我们有一个名为第一个接口的交互点,它包含名为接口函数()的容量。我们无法在我们创建的连接点内部特征化宣布函数,并且我们需要在子类内部特征化宣布函数。最终,我们有一个名为child class的子类,它具有child function()的功能,并使用PHP的extends和implements属性从交互点继承功能。此外,我们在子类中定义了我们的interface function()。此外,为了访问类和交互点,我们创建了一个名为obj的对象,并使用相同的对象调用了所有的函数。
接口(使用多个接口)
语法:
Interface first - interface {
Statement . . .
. . . . . . . .
. . . . . . . .
}
Interface second - interface {
Statement . . .
. . . . . . . .
. . . . . . . .
}
Class child - class implements first - interface, second - interface {
Statement . . .
. . . . . . . .
. . . . . . . .
}
示例:
<?php
interface firstInterface {
public function interfaceone();
}
interface secondInterface {
public function interfacetwo();
}
class childClass implements firstInterface, secondInterface {
function interfaceone() {
echo "this is the first interface";
}
function interfacetwo() {
echo "this is the second interface";
}
public function childFunction()
{
echo "this is a child inherited from both interfaces";
}
}
obj = new childClass();obj->interfaceone();
obj->interfacetwo();obj->childFunction();
?>
输出:
在上面的程序中,我们声明了两个交互点,第一个是与名为 第一个接口 的工作 interface one() 相互作用,第二个是与名为 第二个接口 的工作 outerfacetwo() 相互作用。 最后,我们有一个名为 子类 的子类,其中工作 child function() ,并利用执行提供程序获得了两个交互点的信息。 我们在功能内部给出了接口中声明的功能的含义。 此外,为了访问类和交互点,我们创建了一个名为obj的对象,并使用相同的对象调用了所有的函数。 我们只声明了连接点功能,将在子类中定义相同的功能。