python魔术方法call_php魔术方法__call
__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相关推荐
- Python最会变魔术的魔术方法,我觉得是它
在上篇文章中,我有一个核心的发现:Python 内置类型的特殊方法(含魔术方法与其它方法)由 C 语言独立实现,在 Python 层面不存在调用关系. 但是,文中也提到了一个例外:一个非常神秘的魔术方 ...
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __uns
1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的 __get( $property ) 当调用一个未定义的属性时访问此方法 __set( $property, $va ...
- python次方运算_neg__python 魔术方法1 运算符重载
python中存在一些特殊的方法,这些方法通常采用格式:__method__().这些方法会在特定的情况下自动调用.例如:__new__().__init__().__del__() 等生命周期方法. ...
- python基础之类的属性方法、魔术方法普通方法
类的定义.调用方法.引用属性 类的属性和方法 类的属性 类属性的访问 类属性可以直接访问,无需实例化 类属性也可以通过实例来访问 实际上,所有的实例是共享类属性的 类属性的修改 修改了类属性后,对应的 ...
- (转)python类:magic魔术方法
原文:https://blog.csdn.net/pipisorry/article/details/50708812 版权声明:本文为博主皮皮http://blog.csdn.net/pipisor ...
- Python学习笔记1:数据模型和特殊方法(魔术方法)
首先不要脸的放上个人网站:www.comingnext.cn 1.关于数据模型 在Python的官方文档中是这样说的: 对象是Python对数据的抽象.Python程序中所有数据都由对象或对象之间的关 ...
- Python世界里的魔术方法(一)
序言 传说中,Python对象天生具有一些神奇的方法,它们具有一些魔力,因此它们总被双下划线所包围着.这些方法统称为魔术方法.在特定的操作下,这些魔术方法会被自动调用,并且表现出许多神奇的现象. 它们 ...
- Python的面向对象,魔术方法、类的三大特征、自省、实例空间、经典类与新式类
目录 1.什么是面向对象 1.1 面向过程 1.2 面向对象 1.3 面向对象的优点 2.类 2.1 什么是类.对象,方法和属性 2.2 类的定义和使用 2.2.1 类名规范和类的写法 2.3 魔术方 ...
- Python中最全魔术方法整理
Python中的魔术方法 所谓魔法函数(Magic Methods),是Python的一种高级语法,允许你在类中自定义函数,并绑定到类的特殊方法中.比如在类A中自定义__str__()函数,则在调用s ...
最新文章
- SpringBoot培训教程--史前文明之Spring简介
- 不会一致性hash算法,劝你简历别写搞过负载均衡
- NFS mount.nfs: access denied by server while mounting 一个解决办法
- 寒假与春节终归,新学期和新任务又至
- 【渝粤教育】广东开放大学 软件工程 形成性考核 (50)
- 安装教程-VMware 12 安装 Windows 10 企业版
- python内置哪些装饰器_Python内置的wraps装饰器有什么用
- 关于web.xml中不能识别taglib的问题
- 生于俄罗斯的 Web 服务器王者 Nginx,现宣布俄罗斯禁止贡献
- rbf神经网络和bp神经网络,rbf神经网络百度百科
- 搜索引擎优化的一些注意事项
- 重拾C语言——结构体和共用体
- 科大星云诗社动态20210513
- 爆火的红光光浴真不是智商税,科普一下#大健康#红光光浴#红光#种光光学
- html调用手机NFC,怎样使用手机的NFC功能模拟门禁?
- 海盗分赃问题-----简化问题,分而治之
- cmnet 和 cmwap 收费等区别
- 【MPP数据库Doris】docker容器编译doris数据库 sh build.sh指令 报Fatal错误
- Windows 7 下Fetion2008无法正常运行
- oracle java.sql.SQLException: 列名无效