Определение класса, постоянного в PHP

Я хотел бы определить класс постоянное использование конкатенации существующей константы и строки. Я не могу предопределить его, потому что только скаляры позволяются для предопределения констант, таким образом, у меня в настоящее время есть он как часть моего конструктора с определенным () функция, проверяющая, определяется ли это уже. Это решение работы, но моя константа теперь излишне глобально.

Существует ли способ определить класс, постоянный во времени выполнения в php?

Спасибо.

7
задан joshs 24 February 2010 в 22:50
поделиться

3 ответа

См. Руководство PHP по константам класса

Значение должно быть константным выражением, а не (например) переменной, свойством, результатом математической операции или вызовом функции.

Другими словами, это невозможно. Вы можете сделать это с помощью runkit_constant_add , но подобные исправления для обезьяны категорически не рекомендуются.

9
ответ дан 6 December 2019 в 14:03
поделиться

Другой вариант - использовать волшебные методы __get () и __set () для отклонения изменений определенных переменных. Это не столько константа, сколько переменная только для чтения (с точки зрения других классов). Примерно так:

// Completely untested, just an idea
// inspired in part from the Zend_Config class in Zend Framework
class Foobar {

    private $myconstant;

    public function __construct($val) {
        $this->myconstant = $val;
    }

    public function __get($name) {
        // this will expose any private variables
        // you may want to only allow certain ones to be exposed
        return $this->$name;
    }

    public function __set($name) {
        throw new Excpetion("Can't set read-only property");
    }
}
3
ответ дан 6 December 2019 в 14:03
поделиться

Согласно ответу Гордона , вы не можете делать именно то, что хотите. Однако можно сделать что-то подобное. Вы можете установить его только один раз:

class MyClass
{
    private static $myFakeConst;

    public getMyFakeConst()
    {
        return self::$myFakeConst;
    }

    public setMyFakeConst($val)
    {
        if (!is_null(self::$myFakeConst))
            throw new Exception('Cannot change the value of myFakeConst.');

        self::$myFakeConst = $val;
    }
}
3
ответ дан 6 December 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: