php中的常量vs属性?

时间:2010-08-28 09:12:41

标签: php

我只是不明白,

class MyClass
{
    const constant = 'constant value';

    function showConstant() {
        echo  self::constant . "\n";
    }
}

class MyClass
{
    public $constant = 'constant value';

    function showConstant() {
        echo  $this->constant . "\n";
    }
}

主要区别是什么?它与定义变量一样,不是吗?

3 个答案:

答案 0 :(得分:9)

常量是不变的(哇,谁会想到这个?)他们需要一个类实例。因此,您可以撰写MyClass::CONSTANT,例如PDO::FETCH_ASSOC。另一方面,属性需要一个类,因此您需要编写$obj = new MyClass; $obj->constant

此外还有静态属性,它们也不需要实例(MyClass::$constant)。差异在于,MyClass::$constant可能会更改,但MyClass::CONSTANT可能不会更改。)

因此,只要有标量,非表达式值,就不会更改常量。它比属性更快,不会污染属性名称空间,任何读取代码的人都更容易理解。

答案 1 :(得分:2)

通过在类中定义const值,您可以确保不会有意或无意地更改它。

答案 2 :(得分:-1)

好吧,如果我在后一个例子中做$myClass->constant = "some other value"(给定$ myClass是MyClass的一个实例),那么该值不再是常数。你有区别。常量的值不能改变,因为......它是常数。