PHP-在构造函数中将类常数值分配给属性


PHP - Assigning class constant value to property in constructor

我一直在尝试创建一个简单的类,它在类定义的顶部将默认属性值定义为类常量。

但是,我的代码似乎没有将常量的值分配给构造函数中的属性。

class Tester {
    const DEFAULT_VAL = 500;
    private $val;
    public function __construct() {
        $val = self::DEFAULT_VAL;
    }
    public function show_val() {
        echo "DEFAULT_VAL is " . self::DEFAULT_VAL . "<br />";
        echo "val is " . $val;
    }
}
$obj = new Tester();
$obj->show_val();

运行上面的代码得到的结果是:

const is 500
val is 

我不明白为什么我不能从构造函数中为属性分配预定义的常量默认值。

您需要在代码的两个位置使用$this->val来代替$val,因为Tester的每个实例都有自己的val:

class Tester {
    const DEFAULT_VAL = 500;
    private $val;
    public function __construct() {
        $this->val = self::DEFAULT_VAL;
    }
    public function show_val() {
        echo "DEFAULT_VAL is " . self::DEFAULT_VAL . "<br />";
        echo "val is " . $this->val;
    }
}
$obj = new Tester();
$obj->show_val();

输出:

DEFAULT_VAL is 500
val is 500

只要默认值是常量(表达式),您就可以在属性的定义中注意到:

class Tester
{
    const DEFAULT_VAL = 500;
    private $val = self::DEFAULT_VAL;
    public function __construct() {
    }
}

完成后,当构建对象时,它已经设置好了,所以你不必编写代码来设置它。Demo。