PHP7 - 类静态变量不支持变量函数

问题描述

PHP7.4.3 中,我尝试使用类静态变量来引用不同的类静态成员函数,如下所示:

1  class ColorT {
2    static $color = "yellow";
3    static function yellow() {
4        echo "yellow"."<br>";
5    }
6    static function green() {
7        echo "green"."<br>";
8    }
9  }

10 ColorT::$color();  //ColorT::yellow() function is expected to be called

11 $global_color = "yellow";
12 ColorT::$global_color();  //ColorT::yellow() function is expected to be called

第 10 行和第 12 行,我希望调用 ColorT::yellow()
第 12 行按预期工作。
但是在第 10 行,它打印错误

PHP 致命错误:未捕获的错误函数名必须是字符串

PHP不支持类静态变量引用类静态成员函数吗?
如果支持,那么如何修复第 10 行中提到的错误

解决方法

在第 10 行中,ColorT::$color 是“黄色”。所以 ColorT::$color() 会调用 yellow(),而不是 ColorT::yellow()

您可以使用 callbable ['ColorT',ColorT::$color] 来动态调用 ColorT::yellow()

示例:

class ColorT {
  static $color = "yellow";
  static function yellow() {
      echo "yellow"."<br>";
  }
  static function green() {
      echo "green"."<br>";
  }
}

$method = ['ColorT',ColorT::$color];
$method();

输出:

yellow<br>

另一种方法是在 ColorT 中创建一个方法:

static public function callFunc() 
{
    [__class__,self::$color]();
}

并使用

ColorT::callFunc(); // "yellow<br>"

您也可以使用 is_callable()

检查