【问题标题】:using object propery as static class name during method invokation在方法调用期间使用对象属性作为静态类名
【发布时间】:2015-03-13 20:20:26
【问题描述】:

假设我有一个带有静态方法 b() 的静态类 A

现在假设我有类 C 类变量 functionName = 'A';

所以我想通过以下方式在一行中调用 A 的 b() 函数:

//within class C
$this->functionName::b();

但是这最终会返回解析错误....有没有一种方法可以通过 $this->functionName 调用 A::b() when $this->functionName = 'A' 在一行中没有call_user_func 等?

【问题讨论】:

  • 抱歉没有正确阅读问题:(
  • 你为什么反对call_user_func?这就是它存在的原因(部分)。像这样进行动态调用。
  • 如果 $this->functionName 是一个普通变量,例如 $x 它会起作用....例如 $x::b() 如果 $x = 'A' 会起作用....因为$this->functioName 也只是一个变量,就像 $x 我正在尝试使用相同的符号
  • 然后将其设为普通(局部)变量。 $className = $this->className; $className::b(); 效果很好。两行代码。或者使用call_user_func 一行代码。您有两个不错的选择。
  • 从 5.3 开始就可以了。这引出了一个问题,您使用的是哪个版本?

标签: php class object methods static


【解决方案1】:

Uniform Variable Syntax RFC 涵盖了这一点,并已在 PHP 7 中实现。

它没有被向后移植,你将无法在之前的任何版本中使用该语法。


PHP 7 示例:

class a
{
    static public function b()
    {
        echo "Hello!";
    }
}

class c
{
    public $functionName = 'a';

    public function run()
    {
        $this->functionName::b();
    }
}

(new c)->run();

输出:

Hello!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 2012-02-05
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多