为什么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.你不具备做这样的说法,但我认为它有助于可读性...
| 归档时间: |
|
| 查看次数: |
2123 次 |
| 最近记录: |