php 多继承的几种常见实现方法示例


Posted in PHP onNovember 18, 2019

本文实例讲述了php 多继承的几种常见实现方法。分享给大家供大家参考,具体如下:

class Parent1 {
  function method1() {}
  function method2() {}
}
class Parent2 {
  function method3() {}
  function method4() {}
}
class Child {
  protected $_parents = array();
  public function Child(array $parents=array()) {
    $this->_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()));
print_r( array($obj) );die;
$obj->method1();
$obj->method3();

运行结果:

Array
(
    [0] => Child Object
        (
            [_parents:protected] => Array
                (
                    [0] => Parent1 Object
                        (
                        )

                    [1] => Parent2 Object
                        (
                        )

                )

        )

)

interface testA{
  function echostr();
}
interface testB extends testA{
  function dancing($name);
}
class testC implements testB{
  function echostr(){
    echo "接口继承,要实现所有相关抽象方法!";
    echo "<br>";
  }
  function dancing($name){
    echo $name."正在跳舞!";
  }
}
$demo=new testC();
$demo->echostr();
$demo->dancing("模特");

运行结果:

接口继承,要实现所有相关抽象方法!
模特正在跳舞!

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 PHP
用libTemplate实现静态网页的生成
Oct 09 PHP
关于php fread()使用技巧
Jan 22 PHP
收集的二十一个实用便利的PHP函数代码
Apr 22 PHP
浅谈PHP强制类型转换,慎用!
Jun 06 PHP
php+xml实现在线英文词典之添加词条的方法
Jan 23 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
PHP封装的字符串加密解密函数
Dec 18 PHP
php日期操作技巧小结
Jun 25 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 26 PHP
PHP策略模式写法
Apr 01 PHP
PHP正则表达式之RCEService回溯
Apr 11 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 #PHP
PHP cookie与session会话基本用法实例分析
Nov 18 #PHP
php pdo连接数据库操作示例
Nov 18 #PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 #PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 #PHP
PHP实用小技巧之调用录像的方法
Dec 05 #PHP
Laravel框架控制器,视图及模型操作图文详解
Dec 04 #PHP
You might like
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
js鼠标左右键 键盘值小结
2010/06/11 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
vue 扩展现有组件的操作
2020/08/14 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python对字典进行排序实例
2014/09/25 Python
简单理解Python中的装饰器
2015/07/31 Python
Django的信号机制详解
2017/05/05 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
python归并排序算法过程实例讲解
2020/11/04 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
借款协议书
2014/09/16 职场文书
整改落实自查报告
2014/11/05 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python