2010-10-19 78 views
1

为什么name常量在静态函数f2()中无法识别?为什么const在静态函数中是未定义的?

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

另请参见[我试图在此错误消息的原因的规范答案](http://stackoverflow.com /问题/ 2941169 /什么,做最PHP-错误消息通知 - 使用 - 的 - 未定义恒定均值/ 8025500#8025500)。 – 2011-11-06 06:52:06

回答

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引用。你不做到这一点,但我认为它有助于可读性...

+0

非常感谢! – 2010-10-20 10:00:44

+0

正是我在找的东西。许多类似问题的答案对我来说很难理解什么时候使用静态和自己的类常量。这很清楚。 – 2016-08-19 20:57:48

相关问题