__call是魔术方法中的一个,当程序调用到当前类中未声明或没权限调用的方法时,就会调用__call方法

class test

{

public function emptyFunc(){

$getArgs = func_get_args();

$funcName = $getArgs[0];

//$params = array_slice($getArgs, 1);

//var_dump($params);  // this is params

return $funcName . ' function is not exists';

}

public function __call($m, $params)

{

$arr[] = $m;

$arr = array_merge($arr, $params);

return call_user_func_array(array($this, 'emptyFunc'), $arr);

}

protected function nowToTest(){

return 'this is nowToTest';

}

}

$testObj = new test();

var_dump($testObj->nowToTest('params1','params1'));

//var_dump result => string(29) "nowToTest function is not exists"

如上test类中,nowToTest方法是存在的,但修饰这方法的是protected(保护),所以实例出来的对象没权限执行,这时就跑到__call中去了.

_call()有2个参数,第一个$m是当前调用方法的名字,这里是'nowToTest',第二个$params是调用'nowToTest'方法时传入的参数。以数组的形式组合在$params中。

call_user_func_array($method, $params)这个php方法的作用是调用 $method方法,参数为$params,如果方法是在类中的话,就用上面那种数组形式调用就可以了,这里调用的是emptyFunc方法。 func_get_args()的作用是以数组形式获取传入的所有参数。而这些参数在__call中传入的,第一个参数就是方法名。所以最后返回的结果是

"nowToTest function is not exists"

python魔术方法call_php魔术方法__call相关推荐

  1. Python最会变魔术的魔术方法,我觉得是它

    在上篇文章中,我有一个核心的发现:Python 内置类型的特殊方法(含魔术方法与其它方法)由 C 语言独立实现,在 Python 层面不存在调用关系. 但是,文中也提到了一个例外:一个非常神秘的魔术方 ...

  2. PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __uns

    1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的 __get( $property ) 当调用一个未定义的属性时访问此方法 __set( $property, $va ...

  3. python次方运算_neg__python 魔术方法1 运算符重载

    python中存在一些特殊的方法,这些方法通常采用格式:__method__().这些方法会在特定的情况下自动调用.例如:__new__().__init__().__del__() 等生命周期方法. ...

  4. python基础之类的属性方法、魔术方法普通方法

    类的定义.调用方法.引用属性 类的属性和方法 类的属性 类属性的访问 类属性可以直接访问,无需实例化 类属性也可以通过实例来访问 实际上,所有的实例是共享类属性的 类属性的修改 修改了类属性后,对应的 ...

  5. (转)python类:magic魔术方法

    原文:https://blog.csdn.net/pipisorry/article/details/50708812 版权声明:本文为博主皮皮http://blog.csdn.net/pipisor ...

  6. Python学习笔记1:数据模型和特殊方法(魔术方法)

    首先不要脸的放上个人网站:www.comingnext.cn 1.关于数据模型 在Python的官方文档中是这样说的: 对象是Python对数据的抽象.Python程序中所有数据都由对象或对象之间的关 ...

  7. Python世界里的魔术方法(一)

    序言 传说中,Python对象天生具有一些神奇的方法,它们具有一些魔力,因此它们总被双下划线所包围着.这些方法统称为魔术方法.在特定的操作下,这些魔术方法会被自动调用,并且表现出许多神奇的现象. 它们 ...

  8. Python的面向对象,魔术方法、类的三大特征、自省、实例空间、经典类与新式类

    目录 1.什么是面向对象 1.1 面向过程 1.2 面向对象 1.3 面向对象的优点 2.类 2.1 什么是类.对象,方法和属性 2.2 类的定义和使用 2.2.1 类名规范和类的写法 2.3 魔术方 ...

  9. Python中最全魔术方法整理

    Python中的魔术方法 所谓魔法函数(Magic Methods),是Python的一种高级语法,允许你在类中自定义函数,并绑定到类的特殊方法中.比如在类A中自定义__str__()函数,则在调用s ...

最新文章

  1. SpringBoot培训教程--史前文明之Spring简介
  2. 不会一致性hash算法,劝你简历别写搞过负载均衡
  3. NFS mount.nfs: access denied by server while mounting 一个解决办法
  4. 寒假与春节终归,新学期和新任务又至
  5. 【渝粤教育】广东开放大学 软件工程 形成性考核 (50)
  6. 安装教程-VMware 12 安装 Windows 10 企业版
  7. python内置哪些装饰器_Python内置的wraps装饰器有什么用
  8. 关于web.xml中不能识别taglib的问题
  9. 生于俄罗斯的 Web 服务器王者 Nginx,现宣布俄罗斯禁止贡献
  10. rbf神经网络和bp神经网络,rbf神经网络百度百科
  11. 搜索引擎优化的一些注意事项
  12. 重拾C语言——结构体和共用体
  13. 科大星云诗社动态20210513
  14. 爆火的红光光浴真不是智商税,科普一下#大健康#红光光浴#红光#种光光学
  15. html调用手机NFC,怎样使用手机的NFC功能模拟门禁?
  16. 海盗分赃问题-----简化问题,分而治之
  17. cmnet 和 cmwap 收费等区别
  18. 【MPP数据库Doris】docker容器编译doris数据库 sh build.sh指令 报Fatal错误
  19. Windows 7 下Fetion2008无法正常运行
  20. oracle java.sql.SQLException: 列名无效

热门文章

  1. (转)搭建企业内部yum仓库(centos6+centos7+epel源)
  2. java 中 bean 的生命周期
  3. FineReport——权限分配以及自定义首页
  4. 零代价修复海量服务器的内核缺陷——UCloud内核热补丁技术揭秘
  5. 操作系统2--操作系统结构
  6. [转贴]2006十大经典语句
  7. 一笔画问题【数据结构-图论】
  8. CentOS重启启动Apache,VNC
  9. 修改squid的Header中的X-Cache为Powered-By-LinuxTone
  10. Nginx源代码分析 - 日志处理