PHP - присвоение значения константы класса свойству в конструкторе - PullRequest
4 голосов
/ 08 января 2012

Я пытался создать простой класс, который определяет значения свойств по умолчанию как константы класса в верхней части определения класса.

Однако мой код, похоже, не присваивает значение константык свойству в конструкторе.

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 

Я не могу понять, почему я не могу назначить предопределенное постоянное значение по умолчанию для свойстваиз конструктора.

Ответы [ 2 ]

4 голосов
/ 08 января 2012

Вам нужно использовать $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
2 голосов
/ 08 января 2012

Пока значение по умолчанию является константой (выражением), вы можете просто заметить, что ниже в определении свойства:

class Tester
{
    const DEFAULT_VAL = 500;

    private $val = self::DEFAULT_VAL;

    public function __construct() {
    }
}

Это сделано, оно уже установлено, когда объект получен, поэтомуВам не нужно писать код для его установки. Демо .

...