PHP类动态调用方法报错:Undefined property: Test::$todayDate() 求解
问题解决:Undefined property: Test::$todayDate()
错误原因很明确:你把方法名写成了带括号的字符串"todayDate()",PHP会将这个带括号的字符串当作属性名去查找,但你的类里并没有名为todayDate()的属性,因此触发了"Undefined property"错误。
要动态调用todayDate()方法并获取返回值,有几种可行的方式:
方式一:修正方法名字符串(最直接)
把变量里的括号去掉,只保留纯方法名,然后通过可变方法名的方式调用:
public function todayDate() { return date("Y-m-d"); } public function test_func() { $func = "todayDate"; // 仅保留方法名,去掉括号 echo $this->$func(); // 动态调用方法 }
方式二:使用call_user_func函数
通过PHP的回调函数工具call_user_func来调用类方法:
public function test_func() { $func = "todayDate"; echo call_user_func([$this, $func]); // 传入类实例和方法名组成的数组 }
方式三:处理带括号的方法名字符串
如果你的$func变量是从其他地方获取的、必须保留带括号的格式,可以先去掉括号再调用:
public function test_func() { $func = "todayDate()"; $funcName = rtrim($func, "()"); // 移除字符串末尾的括号 echo $this->$funcName(); }
核心逻辑:PHP动态调用方法时,可变变量中只需要存储不带括号的方法名字符串,括号是方法调用的语法符号,不属于方法名本身。
内容的提问来源于stack exchange,提问作者Khaldoon Mansour
相关产品推荐
相关产品推荐

