我只是不明白,
class MyClass
{
const constant = 'constant value';
function showConstant() {
echo self::constant . "\n";
}
}
class MyClass
{
public $constant = 'constant value';
function showConstant() {
echo $this->constant . "\n";
}
}
主要区别是什么?它与定义变量一样,不是吗?
答案 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的一个实例),那么该值不再是常数。你有区别。常量的值不能改变,因为......它是常数。