PHP call_user_func 函数调用类方法时,__call 方法失效的原因及解决方法
在 PHP 开发中,call_user_func 函数常用于动态调用函数或方法。然而,直接用它调用类的未定义方法时,__call 魔术方法可能不会被触发,本文将解释原因并提供解决方案。
问题:
尝试使用 call_user_func('Route', 'abc') 调用 Route 类中的 abc 方法时,__call 方法(假设已定义)未能被触发。这是因为 call_user_func 的第一个参数必须是可调用结构 (callable),而 'Route' 只是一个字符串,表示类名,而非可调用的对象实例。
立即学习“PHP免费学习笔记(深入)”;
call_user_func 期望的参数类型:
解决方案:
要正确调用 Route 类的 abc 方法并触发 __call 方法,需将第一个参数改为可调用结构,即包含对象实例和方法名的数组:
call_user_func([new Route(), 'abc'], '参数1', '参数2');
这样,call_user_func 才能正确识别并调用对象方法。如果方法不存在,则会调用 __call 方法进行处理。 通过传递一个包含对象实例和方法名的数组,call_user_func 正确地将方法调用委托给对象,从而触发 __call 方法。
以上就是PHP call_user_func调用类方法时,__call方法为何有时不生效?的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号