很多站长朋友们都不太清楚php允许父类有多个子类,今天小编就来给大家整理php允许父类有多个子类,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php中的类是单继承,那要有多个类继承怎么办? 2、 一个子类可以有一个父类,但一个父类可以有多个子类 3、 PHP中类的使用于作用 4、 php中子类最多继承几个父类 5、 php中子类只能继承一个父类,然而父类可以多个子类,这样理解对吗? php中的类是单继承,那要有多个类继承怎么办?PHP没有多继承的特性。即使是一门支持多继承的编程语言,我们也很少会使用这个特性。在大多数人看来,多继承不是一种好的设计方法。想要给某个类添加额外的特性,不一定要使用继承。这里我提供一种模拟多继承的方法以供参考。
PHP有一个魔术方法,叫做__call。当你调用一个不存在的方法时,这个方法会被自动调用。这时,我们就有机会将调用重定向到一个存在的方法。继承多个父类的子类,寻找方法的过程一般是这样的:
本身的方法 -> 父类1的方法 -> 父类2的方法...
模拟过程大致是这样:将各个父类实例化,然后作为子类的属性。这些父类提供一些公有的方法。当子类拥有某方法时,__call()函数不会被调用。这相当于“覆盖”了父类的方法。当调用了不存在的方法时,通过__call()方法依次从父类中寻找可以调用的方法。虽然这不是完备的多继承,但可以帮助我们解决问题。
<?php
class Parent1 {
function method1() {}
function method2() {}
}
class Parent2 {
function method3() {}
function method4() {}
}
class Child {
protected $_parents = array();
public function Child(array $parents=array()) {
$_parents = $parents;
}
public function __call($method, $args) {
// 从“父类"中查找方法
foreach ($this->_parents as $p) {
if (is_callable(array($p, $method))) {
return call_user_func_array(array($p, $method), $args);
}
}
// 恢复默认的行为,会引发一个方法不存在的致命错误
return call_user_func_array(array($this, $method), $args);
}
}
$obj = new Child(array(new Parent1(), new Parent2()));
$obj->method1();
$obj->method3();
这里没有涉及属性的继承,但实现起来并不困难。可以通过__set()和__get()魔术方法来模拟属性的继承。请你动手实践。
一个子类可以有一个父类,但一个父类可以有多个子类子类只能有一个父类,但是一个父类可以有多个子类,比如“老师”这个类,子类可以是女老师,也可以是男老师,老师的父类可以是“职位”,可以说老师有男老师,有女老师,但不能说职位有男老师,女老师,也就是一个has a和is a的关系。
一个类只能有一个直接父类(可以是抽象类),但可以充实实现多个接口。一个类使用extends来继承抽象类,使用implements来实现接口。
扩展资料
抽象类体现了一种继承关系,目的是复用代码,抽象类中定义了各个子类的相同代码,可以认为父类是一个实现了部分功能的“中间产品”,而子类是“最终产品”。父类和子类之间必须存在“is-a”的关系,即父类和子类在概念本质上应该是相同的。
接口并不要求实现类和接口在概念本质上一致的,仅仅是实现了接口定义的约定或者能力而已。接口定义了“做什么”,而实现类负责完成“怎么做”,体现了功能(规范)和实现分离的原则。接口和实现之间可以认为是一种“has-a的关系”。
PHP中类的使用于作用类就是很多方法的集合
这些方法是你在程序中经常会用到的一些逻辑或算法
将他们包进类里面,可以提升程序的效率,减少代码的重复
比如你有一个类文件 web_common.class.php ,里面有一个类,名为 common
那么当你的程序需要用到此类里的方法时,首先要做的是将类文件包进来
require_once 'web_common.class.php';
然后呢,为你的类创建一个对象,也就是把类实例化。(未实例化的类是无法使用的,有兴趣可以试一下)
$object = new common;
接下来,在你需要调用类中方法的位置调用方法,如:
$object->my_function();
是不是很简单呢?还要说明一点的是,类中静态方法调用是和以上调用形式是不同的,调用方式如下:
$object::staticfunction();
关于子类继承父类的问题,有两种可能
第一,父类的方法不够用或程序中需要父类的多种方法集合
第二,父类为抽象类,那么想使用此类的方法必须由子类来继承才能使用
继承方法如下:
class son_class extands father_class {
}
需要说明的是,一个父类可以有多个子类,但一个子类却只能继承一个父类
调用的时候,父类为普通类时,对象可以是父类也可以是子类;父类为抽象类时,对象只能为子类
php中子类最多继承几个父类只能继承一个,可以这样理解,孩子只能有一个爹,而当爹的可以有很多个孩子。php中提供了接口可以实现多个继承关系
php中子类只能继承一个父类,然而父类可以多个子类,这样理解对吗?PHP只支持单继承,但是基类也就是父类下面可以有多个子类
比如一般的MVC里的模型父类和控制器父类
都是这样一个形式
关于php允许父类有多个子类的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php允许父类有多个子类 php中子类最多可以继承几个父类的详细内容...