【问题标题】:Why const is undefined in static function?为什么 const 在静态函数中未定义?
【发布时间】:2010-10-19 13:47:35
【问题描述】:

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

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 ...

我做错了什么?

【问题讨论】:

标签: php static constants


【解决方案1】:

很简单,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 引用。您没有必须这样做,但我确实认为它有助于提高可读性...

【讨论】:

  • 正是我想要的。对于类似问题的许多答案,我很难理解何时使用 static 与 self 和类常量。这说得很清楚了。
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 2011-03-02
  • 2017-06-21
  • 2011-07-20
相关资源
最近更新 更多