为什么const在静态函数中是未定义的?

Mis*_*hko 2 php static const

为什么name在静态函数中无法识别常量f2()

class Foo {
    protected static function f1($s) {
        echo "doing $s";
    }
}
class Bar extends Foo {
    const name = 'leo';
    public static function f2() {
        Foo::f1(name);
    }
}
$bar = new Bar();
$bar->f2();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Notice: Use of undefined constant name - assumed 'name' in ...
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么 ?

irc*_*ell 13

很简单,name常量是未定义的.你定义的是一个类常量.您可以通过以下方式访问它:

Bar::name
Run Code Online (Sandbox Code Playgroud)

或者来自Bar班级或其任何后代

self::name
Run Code Online (Sandbox Code Playgroud)

或者来自Bar班级或其任何后代,只有5.3+:

static::name
Run Code Online (Sandbox Code Playgroud)

因此,将呼叫更改为:

public static function f2() {
    Foo::f1(self::name);
}
Run Code Online (Sandbox Code Playgroud)

这应该为你做...

哦,还有一个注意事项.通常,命名约定是常量应全部为大写.所以它应该是const NAME = 'leo';,并使用引用self::NAME.你不具备做这样的说法,但我认为它有助于可读性...