строка — PHP эквивалентный Perl qq //?

Я конвертирую некоторый код Perl в PHP, и большая часть его содержит сложные строки SQL с одинарными и двойными кавычками. Это легко сделать в Perl, используя qq// цитирую так:

qq/SELECT * FROM tablename WHERE "MixedCaseColName" = 'string'/

Лучшее, что я могу сделать в PHP — это выбрать одинарные или двойные кавычки для строчки, а затем экранировать один или другой тип кавычек:

"SELECT * FROM tablename WHERE \"MixedCaseColName\" = 'string'"

Это работает хорошо для коротких строк, но это боль для очень длинных последовательностей с множеством кавычек, чтобы найти и убежать. Любые предложения о лучшем способе сделать это в PHP, который прост как Perl?

1

Решение

Вы можете использовать синтаксис heredoc: <<<, После этого оператора предоставляется идентификатор, затем новая строка. Далее следует сама строка, а затем снова тот же идентификатор, чтобы закрыть цитату.

Закрывающий идентификатор должен начинаться в первом столбце строки. Кроме того, идентификатор должен следовать тем же правилам именования, что и любая другая метка в PHP: он должен содержать только буквенно-цифровые символы и символы подчеркивания и должен начинаться с нецифрового символа или символа подчеркивания.

Попробуйте с этим примером:

<?php

$query = <<<EOD
SELECT * FROM tablename WHERE "MixedCaseColName" = 'string'/
EOD;

echo $query;

?>

Узнайте больше на:

http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

1

Другие решения

Не такой удобный или компактный, как операторы кавычек Perl, но есть метод кавычек, который позволяет использовать как одинарные, так и двойные кавычки без экранирования. Это называется Heredoc.

Пример:

<?php

$string = <<<EOT

SELECT * FROM tablename WHERE "MixedCaseColName" = 'string'

EOT;

?>

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

Важно отметить, что первый идентификатор должен быть последним в строке, а последний идентификатор вместе с точкой с запятой должен быть ЕДИНСТВЕННЫМ в строке, ничего до или после, без пробелов, ничего.

Подробнее об этом здесь: http://php.net/language.types.string

1

Пожалуйста, посмотрите на perldoc perldata. Он объясняет, как Perl обрабатывает строки в одинарных и двойных кавычках, которые очень похожи на строки bash.

q/.../ а также qq/.../ эквивалентны '...' а также "..." но допускается изменение разделителя, чтобы исключить необходимость экранирования встроенных кавычек.

-3
По вопросам рекламы [email protected]