为什么静态函数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 ...
我做错了什么?
答案 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
引用。你不有这样做,但我认为它有助于提高可读性......