3

目前我正在阅读 PHP 5 OOP(属性部分),在那里我发现了以下语句:

在类方法中,可以使用 $this->property 形式访问属性、常量和方法

这很奇怪,但我无法使用该格式访问常量。以下代码将引起注意:

class A
{
    const HELLO = 'HELLO WORLD';

    public function __construct()
    {
        echo $this->HELLO;
    }
}

$a = new A();

我是否误解了某些东西或文档的作者犯了错误?

4

6 回答 6

3

访问常量尝试

class A
{
    const HELLO = 'HELLO WORLD';

    public function __construct()
    {
        echo self::HELLO;
    }
}
于 2012-10-28T16:01:43.813 回答
2

手册中的条目确实有点误导。我现在已经删除了对常量和方法的引用,因为它们无论如何都不属于关于属性的一章。新段落现在听起来像这样:

在类方法中,可以使用 ->(对象运算符)访问非静态属性:$this->property(其中 property 是属性的名称)。使用 ::(双冒号)访问静态属性:self::$property。有关静态和非静态属性之间差异的更多信息,请参阅静态关键字。

最多可能需要一周时间,所有镜像上都会出现更改。

感谢您指出。

于 2012-10-28T17:46:52.790 回答
0

self使用或使用类名访问常量。如果你在同一个班级:

self::HELLO

如果您在另一个类中使用它:

A::HELLO 
于 2012-10-28T16:02:03.193 回答
0

你必须使用self::HELLO

于 2012-10-28T16:02:29.710 回答
0

对此最清晰的解释在 PHP 手册的Class Constants页面上。从类内部,您可以使用, 从您用来访问它self::constant的类外部访问常量。Classname::constant

对于您的示例,您将使用:-

class A
{
    const HELLO = 'HELLO WORLD';

    public function __construct()
    {
        echo self::HELLO;
    }
}

$a = new A();

或者,从课外:-

echo A::HELLO;

但是,我链接的手册页中的解释非常好而且非常清楚。

我应该指出,没有必要实例化类来访问其中包含的常量。以下将起作用: -

class A
{
    const HELLO = 'HELLO WORLD';
}

echo A::HELLO;
于 2012-10-28T16:25:11.737 回答
0

在类本身中,您可以像访问 static: 一样访问常量self::MY_CONSTANT,在类之外,您可以使用Class_Name::MY_CONSTANT. 如有疑问,(例如,或抽象类中的示例),我喜欢使用:

$self = get_called_class($this);
$self::MY_CONSTANT;//gets the constant of currently called class

记住这一点的简单方法:想想 PDO 查询:

$stmt->fetch(PDO::FETCH_ASSOC);//<-- uses class constant
于 2012-10-28T16:27:47.057 回答