PHP класс константа строка переменная, охватывающая несколько строк

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

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

например,

$variable = "line 1" .
            "line 2" .
            "line 3";

но выше не работает.

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

каков наилучший способ?

3 ответов


если вы используете PHP >= 5.3, вы могли бы использовать синтаксис HEREDOC объявить строку :

class MyClass {
    public $str = <<<STR
this is
a long
string
STR;

}

$a = new MyClass();
var_dump($a->str);

а это :

  • возможно только с PHP >= 5.3
  • и строка не должна содержать никакой переменной
    • это потому, что значение строки должно быть известно во время компиляции
    • что, кстати, объясняет, почему конкатенация, с . не будет работать : это делается при исполнении время.

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


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

вы не можете этого сделать ; решением может быть инициализация строки в конструкторе класса:

class MyClass {
    public $str;
    public function __construct() {
        $this->str = <<<STR
this is
a long
string
STR;
    }
}

(то же самое не с newlines)

или здесь вы можете выполнять конкатенации строк :

class MyClass {
    public $str;
    public function __construct() {
        $this->str = 'this is' .
                     'a long' .
                     'string';
    }
}

(таким образом, никаких новых строк)


В противном случае вы можете иметь строку, окруженную одинарными или двойными кавычками, и поместить ее на несколько строк:

class MyClass {
    public $str = "this is
a long
string";
}

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


$var = "this is a really long variable and I'd rather have it " .
 "span over multiple lines for readability sake. God it's so hot in here " .
 "can someone turn on the A/C?";
echo $var;

выходы:

это действительно длинная переменная, и я бы предпочел, чтобы она охватывала несколько строк для удобства чтения. Боже, здесь так жарко, может кто - нибудь включить кондиционер?

то, что у вас теперь работает с помощью оператор конкатенации строк. Если вы можете опубликовать дополнительную информацию о своей проблеме, некоторый код или, возможно, дополнительное объяснение как он не работает. Больше информации приведет вас к лучший ответ.


Я использую 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 смог распознать, что операция конкатенации только по значениям, уже известным во время компиляции, может быть запущена во время компиляции, а результат заменен (существа более осведомленные, чем я, знают, почему это так).