Возможно ли в PHP экранировать символы новой строки в строках, как в C? - PullRequest
1 голос
/ 26 августа 2009

В C вы можете продолжить строковый литерал в следующей строке, избегая символа новой строки: char* p = "hello \ new line."; (My C немного ржавый, и это может быть не на 100%)

Но в php обратный слеш принимает буквально: $p = "hello \ new line.";

т.е. символ обратной косой черты является частью строки. Есть ли способ получить поведение C в PHP в этом случае?

Ответы [ 4 ]

7 голосов
/ 27 августа 2009

Можно ли просто объединить вашу строку следующим образом:

$p = "hello " .
     "new line.";
6 голосов
/ 27 августа 2009

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

Для начала вы можете продолжить строку на следующей строке, не используя какой-либо конкретный символ. Следующее является действительным и законным в PHP.

$foo = 'hello there two line 
string';

$foo = 'hello there two line 
    string';    

Второй пример должен быть одним из недостатков этого подхода. Если вы не оставили правильные значения для оставшихся строк, вы добавляете дополнительные пробелы к вашей строке.

Второй подход заключается в использовании конкатенации строк

$foo = 'hell there two line'.
'string';

$foo = 'hell there two line'.
    'string';   

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

Наконец, есть формат HEREDOC. Как и в первом варианте, HEREDOC также позволит вам разбивать строки на несколько строк.

$foo = <<<TEST
I can go to town between the the start and end TEST modifiers.  

    Wooooo Hoooo.  You can also drop $php_vars anywhere you'd like.

Oh yeah!
TEST;

У вас возникают те же проблемы с пробелами, что и в первом примере, но некоторые люди считают HEREDOC более читабельным.

3 голосов
/ 27 августа 2009

Короткий ответ: вы не можете сделать это так же легко, как в C, вам нужно либо объединить (лучше):

$p = "This is a long".
     " non-multiline string";

или удалите символы новой строки (ужасно, не делайте этого ):

$p = "This will contain the newlines
 before this line";

//for instance str_replace() can remove the newlines
3 голосов
/ 27 августа 2009

В PHP вы можете просто продолжить новую строку со строкой.

например.

<?php
    $var = 'this is
    some text
    in a var';
?>
...