当前位置: 首页 > news >正文

php __call实现多继承,PHP通过_call实现多继承

上一篇讲到php可以通过接口是实现代码的复用。

那么这篇文章简单介绍下使用_call实现代码的复用。

_call:php的一个魔术方法,当调用类中不存在的method时,会自动调用_call.

示例代码:

class One{

function method_1(){

echo '11
';

}

function method_2(){

echo '22
';

}

}

class Two{

function method_3(){

echo '33
';

}

function method_4(){

echo '44
';

}

}

class StaticDemo{

protected $Class = array();

public function __construct(array $class = array()){

$this->Class = $class;

}

public function __call($name, $arguments)

{

// TODO: Implement __call() method.

foreach ($this->Class as $v){

if (is_callable(array($v, $name))) {

//call_user_func_array在上篇文章中已作出理解

return call_user_func_array(array($v, $name), $arguments);

}

}

return call_user_func_array(array($this, $name), $arguments);

}

}

$obj = new StaticDemo(array(new One(), new Two()));

$obj->method_1();

$obj->method_3();

运行结果:11,33

相关文章:

  • php加水印二维码,php给图片加水印的代码
  • 跨数据库查询oracle,跨数据库查询(oracle跨数据库查询)
  • centos oracle home目录,CentOS下查找文件安装路径
  • oracle 同步索引,oracle数据库连表查询视图索引)
  • 整理oracle数据字典,oracle结构梳理---数据字典
  • oracle项目是啥,Oracle 基础知识其中七个主要项目
  • constel matlab,基于MATLAB环境下16QAM调制及解调仿真程序说明.doc
  • oracle 00947,ORA-00947: Not enough values 没有足够的值
  • nginx php 413,Nginx出现413 Request Entity Too Large错误
  • oracle重启配置服务,重启系统的时候自动启动oracle服务-安装配置
  • ORACLE---添加控制文件,Oracle数据库添加和移动控制文件
  • linux mongodb服务启动命令行,liunx 后台启动mongodb服务
  • 英灵神殿服务器linux,Valheim英灵神殿linux版本更新教程 服务器内游戏更新方法
  • Linux获取norflash信息,linux ——Uboot模式下读取NORflash芯片数据
  • sqoop在Linux中环境搭建,sqoop搭建和运行小结
  • 【React系列】如何构建React应用程序
  • 【知识碎片】第三方登录弹窗效果
  • ES2017异步函数现已正式可用
  • exports和module.exports
  • Git学习与使用心得(1)—— 初始化
  • Go 语言编译器的 //go: 详解
  • Javascripit类型转换比较那点事儿,双等号(==)
  • js算法-归并排序(merge_sort)
  • Linux Process Manage
  • Linux下的乱码问题
  • SQLServer插入数据
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 测试如何在敏捷团队中工作?
  • 番外篇1:在Windows环境下安装JDK
  • 近期前端发展计划
  • 深入浏览器事件循环的本质
  • 正则表达式
  • 《码出高效》学习笔记与书中错误记录
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​2020 年大前端技术趋势解读
  • #每天一道面试题# 什么是MySQL的回表查询
  • (C语言)fgets与fputs函数详解
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)JAVA使用POI操作excel
  • (二)斐波那契Fabonacci函数
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (三)elasticsearch 源码之启动流程分析
  • (四)图像的%2线性拉伸
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .Net 6.0 处理跨域的方式
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net转Java自学之路—基础巩固篇十三(集合)