PHP константа строковая переменная, охватывающая несколько строк - PullRequest
11 голосов
/ 09 апреля 2010

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

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

Например,

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

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

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

Какой самый лучший способ?

Ответы [ 3 ]

10 голосов
/ 09 апреля 2010

Если вы используете 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 <= 5.2 </strong>:

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

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

(то же самое не с переводом строки)

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

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

(таким образом, без перевода строки)


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

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

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

2 голосов
/ 09 апреля 2010
$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;

Какие выходы:

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

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

0 голосов
/ 19 июня 2015

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

...