PHP7 - class 静态变量不支持变量函数
PHP7 - class static variable doesn't support variable function
在 PHP7.4.3 中,我尝试使用 class 静态变量来引用不同的 class 静态成员函数,如下所示:
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 Fatal error: Uncaught Error: Function name must be a string
php 不支持 class 静态变量引用 class 静态成员函数吗?
如果支持,那么如何解决第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()
检查
在 PHP7.4.3 中,我尝试使用 class 静态变量来引用不同的 class 静态成员函数,如下所示:
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 Fatal error: Uncaught Error: Function name must be a string
php 不支持 class 静态变量引用 class 静态成员函数吗?
如果支持,那么如何解决第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()