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

时间:2010-10-19 13:47:36

标签: 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();

我收到以下错误:

Notice: Use of undefined constant name - assumed 'name' in ...

我做错了什么?

1 个答案:

答案 0 :(得分:13)

很简单,name常量未定义。您定义的是class constant。您可以通过以下方式访问它:

Bar::name

或来自Bar类或其任何后代

self::name

或来自Bar类或其任何后代,只有5.3+:

static::name

因此,请将呼叫更改为:

public static function f2() {
    Foo::f1(self::name);
}

那应该为你做...

哦,还有另外一个说明。通常,命名约定是常量应全部为大写。所以它应该是const NAME = 'leo';,并使用self::NAME引用。你不这样做,但我认为它有助于提高可读性......