PHP-将类常量值赋给构造函数中的属性

PHP-将类常量值赋给构造函数中的属性,php,class,constants,Php,Class,Constants,我一直在尝试创建一个简单的类,它将默认属性值定义为类定义顶部的类常量 但是,我的代码似乎没有将常量的值赋给构造函数中的属性 class Tester { const DEFAULT_VAL = 500; private $val; public function __construct() { $val = self::DEFAULT_VAL; } public function show_val() { echo "

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

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

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();

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

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

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();
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();

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

class Tester
{
    const DEFAULT_VAL = 500;

    private $val = self::DEFAULT_VAL;

    public function __construct() {
    }
}

这样,在构建对象get时,它已经被设置好了,所以您不必编写代码来设置它

我知道事情会很简单。在PHP中没有做太多OOP,但是感谢您的快速响应!您可以定义属性的默认值,请参阅“了解情况很好”,并欣赏响应。但是,我在构造函数中这样做是因为我希望允许在构造函数中显式设置此值,否则使用默认值。这就是为什么要在构造函数上方预定义它。你仍然可以改变它。
class Tester
{
    const DEFAULT_VAL = 500;

    private $val = self::DEFAULT_VAL;

    public function __construct() {
    }
}