2011-01-15 4 views
1

これは、それがすることになっているものを検索します。PHP preg_match:preg_matchへのこの変数の受け渡しはどのように機能していますか?

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

あなたが最初に割り当てた場合、 'if(!preg_match($ match、$ line、$ matches))'?これらのすべてのケースでは、有効なパターンを渡す限り重要ではないため、同じ結果が得られるはずです。 – BoltClock

答えて

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が後で再利用される可能性があることです。場合によっては、この表記は読みやすくするために使用されることがあります。 (それはローカルの変数のスコープをつぶやいていますが、少しの明快さを追加します)。

2

assignment expressionは、割り当てられた値を返します。したがって、あなたのケースでは、代入式$match="…"は、代入なしの関数と同じパラメーターになる割り当て値"…"を返します。そのように行う

whileの状態のようにいくつかのケースで有用である:ここで

while ($row = mysql_fetch_array($result)) 

$row = mysql_fetch_array($result)mysql_fetch_array($result)によって返されたのと同じ値を返しますが、それはまた$rowに割り当てられています。