我一直在尝试创建一个简单的类,它将默认属性值定义为类定义顶部的类常量。
但是,我的代码似乎没有将常量的值赋给构造函数中的属性。
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
我无法弄清楚为什么我无法从构造函数中为属性分配预定义的常量默认值。
答案 0 :(得分:4)
您需要在代码中的两个位置使用$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
答案 1 :(得分:2)
只要默认值是常量(表达式),您就可以在属性定义中注意到这一点:
class Tester
{
const DEFAULT_VAL = 500;
private $val = self::DEFAULT_VAL;
public function __construct() {
}
}
在构造对象时已经设置了它,因此您不必编写代码来设置它。 Demo