Я использую PHP 5.5.9 и столкнулся с подобной проблемой только с class
константами. Я хочу использовать несколько длинную строку в качестве константы, но не хочу:
- действительно длинные строки кода
- переводы строк в тексте в точках останова
- свойство, которое будет изменчивым
- свойство, недоступное вне класса
Я думаю, что решение здесь - это то, что много сделано в лесах Laravel 5, и почему они продолжали это делать, меня до сих пор сбивало с толку. То, что они делают, это что-то вроде:
public static function getLongPropertyString()
{
return 'A a string that can be arbitrarily long and contain as ' .
'many breaks in the code as you want without line breaks ' .
'appearing in the resulting string.';
}
Этот метод предоставляет неизменную строку. Вы не получаете этого строго, создавая переменную protected
/ private
с геттерами, поскольку она все еще изменчива внутри. Только изменение кода или переопределение может изменить эту строку. Другим преимуществом является то, что создание статического допускает один «экземпляр» на класс.
К сожалению, теперь ваш код будет Class::getProperty()
, а не просто Class::property
. Другим недостатком является то, что объединение будет выполняться каждый раз, когда вы вызываете функцию, но в зависимости от того, как вы ее используете, эти затраты обычно незначительны.
Было бы здорово, если бы PHP-компилятор мог распознать, что операция конкатенации только для тех значений, которые уже известны во время компиляции, может быть выполнена во время компиляции, и результат заменен (существа, более знающие меня, знают, почему это так).