【问题标题】:PHP equivalent to Perl qq//?PHP相当于Perl qq//?
【发布时间】:2015-05-20 15:25:31
【问题描述】:

我正在将一些 Perl 代码转换为 PHP,其中大部分包含带有单引号和双引号的复杂 SQL 字符串。这很容易在 Perl 中使用 qq// 引用来处理,如下所示:

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

我在 PHP 中能做的最好的事情是为字符串选择单引号或双引号,然后转义一种或其他类型的引号:

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

这适用于短字符串,但对于带有许多引号的非常长的序列要查找和转义是很痛苦的。关于在 PHP 中执行此操作的更好方法的任何建议,就像 Perl 一样简单?

【问题讨论】:

  • 请参阅:php.net/language.types.string,了解如何在 PHP 中处理引用字符串。 heredoc 方法可以派上用场,无需担心单引号或双引号。

标签: php string quotes double-quotes


【解决方案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

【讨论】:

  • @steevithak 你有预付款吗?
【解决方案2】:

不像 Perl 的引号操作符那样方便或紧凑,但有一种引用方法允许单引号和双引号都没有转义。它被称为 heredoc

一个例子:

<?php

$string = <<<EOT

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

EOT;

?>

您可以随意命名标识符,只要您只使用字母数字和下划线字符而不以数字开头。

请务必注意,第一个标识符必须是该行的最后一个标识符,最后一个标识符以及分号必须是该行中唯一的标识符,之前或之后都没有,没有空格缩进,没有.

在此处了解更多信息:http://php.net/language.types.string

【讨论】:

  • 感谢您的建议,PERL 也有 heredoc 引用,但这会占用额外的两行代码并要求字符串左对齐。我真的更喜欢保持代码紧凑和正确缩进的东西。
  • 和 heredocs 在字符串的末尾留下一个换行符(至少在 Perl 中)
  • @steevithak PHP 中没有类似“qq”的东西。最接近的方法是 HEREDOCS
  • 我确定heredoc最后会留下一行回车,但我在使用PHP heredoc和SQL时没有遇到问题。
【解决方案3】:

请查看perldoc perldata。它解释了 Perl 如何处理单引号和双引号字符串,这很像 bash 字符串。

q/.../qq/.../ 等效于 '...'"...",但允许更改分隔符,这样嵌入的引号就不需要转义了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-25
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2020-07-20
    • 2011-12-12
    相关资源
    最近更新 更多