php中的常量与属性?

php中的常量与属性?,php,Php,我就是不明白 class MyClass { const constant = 'constant value'; function showConstant() { echo self::constant . "\n"; } } class MyClass { public $constant = 'constant value'; function showConstant() { echo $this->

我就是不明白

class MyClass
{
    const constant = 'constant value';

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

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

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

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

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

好吧,如果在后一个示例中我这样做了
$myClass->constant=“someothervalue”
(给定$myClass是myClass的一个实例),那么该值就不再是常量。这就是区别。常量的值不能更改,因为。。。它是常量。

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

此外,还有静态属性,它们也不需要实例(
MyClass::$constant
)。这里的区别是,
MyClass::$constant
可能会更改,但
MyClass::constant
可能不会更改。)


所以,只要你有一个标量的、非表达式的、不会改变的值,就使用一个常量。它比属性更快,不会污染属性名称空间,并且对任何阅读您的代码的人来说都更容易理解。

第二个示例将引发
解析错误:语法错误,意外的t_OBJECT_操作符
-您必须将
self
更改为
$this
顺便说一句,对于愚蠢的新手问题,我感到抱歉。我忍不住不问。我的意思是,在python中,只有一种完成工作的方法。除了变量所具有的可见性之外,还有什么例子是常量可以做到var不能做到的(在类内部)?(例如,受保护的$var)。“常量?”www。使用“常量”。与静态$var的差异?这比回答问题更让OP困惑。这在php中是非法的:
$myClass->constant=“some other value”
Nope,这是完全合法的。每个人都应该明白$myClass是myClass的一个实例。@Adam:您可以更改静态类变量的值:
myClass::$variable=“一些新值”不能更改常量的值。