Yii框架使用魔术方法实现跨文件调用功能示例


Posted in PHP onMay 20, 2017

本文实例讲述了Yii框架使用魔术方法实现跨文件调用。分享给大家供大家参考,具体如下:

目前项目用yii框架,controller调用facade的方法,facade调用adapter的方法,adapter调用api的方法,api封装了sql方法,但是大部分情况下,只是单纯的调用,但限于目前项目的规则,都要写方法,而方法都是单纯的return,于是写了个demo,模拟了下。

<?php
class aApi
{
  public static function tt1($name, $age)
  {
    print_r($name);
    echo $age;
  }
}
class aAdapter
{
  public function __call($func, $params)
  {
    $class = substr(get_called_class(), 0, -7) . 'Api';
    return call_user_func_array(array($class, $func), $params);
  }
}
class aFacade
{
  public static function __callstatic($func, $params)
  {
    // 这里也可以用debug_backtrace()
    $class = substr(get_called_class(), 0, -6) . 'Adapter';
    $obj = new $class();
    return call_user_func_array(array($obj, $func), $params);
  }
}
class aController
{
  public function actionC()
  {
    aFacade::tt1(['name'], 'age');
  }
}
$a = new aController;
$a->actionC();

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
从手册去理解分析PHP session机制
Jul 17 PHP
PHP中设置时区方法小结
Jun 03 PHP
优化PHP代码技巧的小结
Jun 02 PHP
smarty基础之拼接字符串的详解
Jun 18 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
Linux下PHP连接Oracle数据库
Aug 20 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
PHP加密技术的简单实现
Sep 04 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 #PHP
利用Laravel事件系统如何实现登录日志的记录详解
May 20 #PHP
Yii框架实现图片上传的方法详解
May 20 #PHP
Yii框架分页实现方法详解
May 20 #PHP
thinkPHP显示不出验证码的原因与解决方法分析
May 20 #PHP
yii2项目实战之restful api授权验证详解
May 20 #PHP
ThinkPHP下表单令牌错误与解决方法分析
May 20 #PHP
You might like
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
PHP源码之explode使用说明
2011/08/05 PHP
请离开include_once和require_once
2013/07/18 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
php实现可逆加密的方法
2015/08/11 PHP
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
2011/03/25 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
举例讲解Python中的算数运算符的用法
2015/05/13 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
英国著名书店:Foyles
2018/12/01 全球购物
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
德国帽子专家:Hutshopping
2019/11/03 全球购物
介绍一下linux的文件权限
2012/02/15 面试题
《争吵》教学反思
2014/02/15 职场文书
小学家长学校培训材料
2014/08/24 职场文书
大学毕业生自我评价
2015/03/02 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
完美解决golang go get私有仓库的问题
2021/05/05 Golang