【问题标题】:PHP - Assigning class constant value to property in constructorPHP - 将类常量值分配给构造函数中的属性
【发布时间】:2012-01-08 17:05:27
【问题描述】:

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

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

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 

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

【问题讨论】:

    标签: php class constants


    【解决方案1】:

    您需要在代码中的两个位置使用$this-&gt;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();
    

    Outputs:

    DEFAULT_VAL is 500
    val is 500
    

    【讨论】:

    • 我知道这会很简单。没有在 PHP 中做太多 OOP,但感谢您的快速响应!
    • 你可以定义一个属性的默认值,见*.com/a/8779542/367456
    【解决方案2】:

    只要默认值是一个常量(表达式),就可以在属性的定义中记下来:

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

    在构造对象时它已经设置好了,所以你不必编写代码来设置它。 Demo.

    【讨论】:

    • 很高兴知道,感谢您的回复。但是我在构造函数中这样做是因为我打算允许在构造函数中显式设置此值,否则使用默认值。
    • 这就是您在构造函数上方预定义它的原因。您仍然可以更改它。
    最近更新 更多