这可以找到它的内容:
if(!preg_match($match="/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i",$line,$matches))
但这不是:
if(!preg_match("/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i",$line,$matches))
preg_match的函数引用表示传递的第一个参数应为:
要搜索的模式,作为 字符串。
但我上面给出的工作示例将模式分配给变量:$match=...
这里发生了什么?我从未见过像preg_match这样的变量。我认为应该是:
preg_match(string $regexpattern, string $thingtosearch, array $matches)
有谁能解释这里发生了什么?
答案 0 :(得分:3)
第一个示例将模式保存到局部变量。
if(!preg_match($match="/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i",$line,$matches))
这相当于写它:
$match="/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i";
if(!preg_match($match,$line,$matches))
preg_match函数没有“看到”参数被赋值给变量,它只接收到值 - 因为PHP中没有命名的函数参数。因此,如何命名局部变量并不重要,手册中的$ param定义对功能没有任何影响。
此代码结构的可能解释是,以后可能会重用正则表达式模式$match
。有时这种表示法仅用于可读性。 (它正在扩大局部变量范围,但增加了一些小的清晰度。)
答案 1 :(得分:2)
assignment expression返回已分配的值。因此,在您的情况下,赋值表达式$match="…"
将返回指定的值"…"
,这将导致函数的参数与没有赋值的情况相同。
在某些情况下(例如while
:
while ($row = mysql_fetch_array($result))
此处$row = mysql_fetch_array($result)
返回mysql_fetch_array($result)
返回的相同值,但也分配给$row
。