Инициирование / объявление констант в классе PHP с конкатенацией - PullRequest
1 голос
/ 26 февраля 2011
class Foo 
{

const MY_CONST = 'this is ' . 'data' ;  //use of concatenation

public function __construct() {}

}

Это дает ошибку:

синтаксическая ошибка, неожиданная '.', ожидая ',' или ';'

Тогда как я должен использовать конкатенацию с константами?

Ответы [ 2 ]

3 голосов
/ 26 февраля 2011

Вы не можете назначать выражения там. Вы можете определять только простые значения в определении класса.

Единственный обходной путь - использовать runkit_constant_add() в конструкторе, который недоступен для всех настроек PHP.

1 голос
/ 26 февраля 2011

Константы, должно быть, константы, поэтому вы не можете работать с выражением здесь.

Я не советую вам runkit_constant_add(), так как он преобразует константу в переменную (или вид)что не так и может сбить с толку.

Чтобы решить эту проблему, я обычно «оборачиваю» свою константу в защищенный массив.Используйте константу, чтобы использовать ключ массива, чтобы иметь более сложные выражения.

class Foo {
    const YEAR = 'year';
    const DAYS = 'days';

    protected $_templates = array(
        self::YEAR => 'There is %s' . 'year ago',
        self::DAYS => 'There are ' . '%s' . 'days ago',
    );

    public function getMessage($key)
    {
        return $this->_templates[$key];
    }
}

И пусть вы используете:

$foo = new Foo();
$foo->getMessage(Foo::YEAR);
...