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 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
PHP页面间参数传递的四种方法详解
Jun 09 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
Aug 19 PHP
php动态添加url查询参数的方法
Apr 14 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 PHP
解决laravel 5.1报错:No supported encrypter found的办法
Jun 07 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
PHP中PDO事务处理操作示例
May 02 PHP
PHP基于curl模拟post提交json数据示例
Jun 22 PHP
php更新cookie内容的详细方法
Sep 30 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
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
php数据访问之增删改查操作
2016/05/09 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
JavaScript闭包相关知识解析
2019/10/19 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
python简单实例训练(21~30)
2017/11/15 Python
Python continue继续循环用法总结
2018/06/10 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
shell程序如何生命变量?shell变量是弱变量吗?
2014/11/10 面试题
大专应届生个人简历的自我评价
2013/10/15 职场文书
我未来的职业规划范文
2014/01/11 职场文书
电子专业毕业生自我鉴定
2014/01/22 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
vue实现同时设置多个倒计时
2021/05/20 Vue.js
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL