В PHP мне нужно избежать обратной косой черты? - PullRequest
18 голосов
/ 05 августа 2010

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

echo 'Application\Models\User'; prints Application\Models\User
echo 'Application\\Models\\User'; same output
echo 'Application\Model\'User'; gives Application\Model'User

Так что это символ экранирования, разве мне не нужно избегать его (\) если я хочу сослаться на Application\Models\User?

Ответы [ 5 ]

31 голосов
/ 05 августа 2010

В одиночных кавычках распознаются только escape-последовательности \\ и \';любое другое вхождение \ интерпретируется как простой символ.

Так как \M и \U не являются допустимыми escape-последовательностями, они интерпретируются как есть.

2 голосов
/ 05 августа 2010

В строках с одинарными кавычками необязательно экранировать обратную косую черту, единственное исключение составляет случай, когда перед одиночной кавычкой или обратной косой чертой (потому что \' и \\ являются escape-последовательностями).

Это часто встречается при написании регулярных выражений, потому что они, как правило, содержат обратную косую черту. Легче читать preg_replace('/\w\b/', ' ', $str), чем /\\w\\b/.

См. Руководство .

1 голос
/ 05 августа 2010

Поскольку ваш последний пример содержит кавычку ('), вам нужно экранировать такие строки с помощью функции addslashes или просто добавить косую черту перед этим, как показано ниже:

'Application\Model\\'User'
0 голосов
/ 05 августа 2010

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

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

<?php
define('DIRECTORY_SEPARATOR', '\\');

echo 'Application'.DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'User';
?>

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

<?php
define('DS', '\\');

echo 'Application'.DS.'Models'.DS.'User';
?>

Это делает ваше приложение переносимым, если вы переходите из среды Windows в среду * nix, поскольку вы можете просто изменить константу разделителя каталогов на прямую косую черту.

0 голосов
/ 05 августа 2010

Вы найдете полное объяснение здесь: http://nl.php.net/manual/en/language.types.string.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...