gpt4 book ai didi

php - 在php中使用静态类变量作为类名调用静态方法

转载 作者:搜寻专家 更新时间:2023-10-31 20:37:15 26 4
gpt4 key购买 nike

我知道你可以像这样使用变量作为类名来调用静态方法:

$className = "Foo";  
$className::Bar(); //works

但是当我尝试像这样使用静态属性作为变量时:

self::$className = "Foo";
self::$className::Bar(); //doesn't

它在我尝试调用该方法的行中给出了以下解析错误:

Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)

那么我如何使用静态属性调用该方法,甚至可能使用类似于我描述的语法(w/o call_user_func 并创建存储 self::$类名)?

最佳答案

你可以这样做:

$tmp = self::$className;
$tmp::Bar();

编辑

根据您的评论,您的问题似乎更多地与 OOP 设计有关,而不是与语法有关。此外,每次给出解决方案时,您都会不断添加新的限制,这使得很难提供相关的答案。

无论如何,我会尝试总结您的选择。您想要的语法不存在(目前无论如何),因此您必须以一种或另一种方式解决它。是的,这很烦人,是的,这意味着您将不得不做出让步。但事实就是如此。

到目前为止,您有以下选择:

  • 使用 call_user_funcforward_static_call 或类似的。
  • 使用临时局部变量。如果它真的困扰你,可能将它包装到一个方法中(例如 static function call($method) { $tmp = self::$classname; return $tmp::$method(); } 然后使用 self::call('bar');)
  • 使用实例而不是静态方法重构您的对象设计,这样您就不需要再这样做了。
  • 使用其他一些非常丑陋和危险的 hack(例如 eval(self::$classname.'::bar();'); 并希望它不会咬你的屁股.

关于php - 在php中使用静态类变量作为类名调用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32137293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com