3

PHP の「貪欲なトークン解析」とは何ですか? Codeigniterガイドラインでこれを見つけました:

「変数を解析する必要がない限り、常に一重引用符で囲まれた文字列を使用し、変数を解析する必要がある場合は、中括弧を使用して貪欲なトークン解析を防ぎます。」

「私の文字列 {$foo}」

適切な説明付きの回答が役立ちます。

ありがとう !!

4

2 に答える 2

6

貪欲なトークン解析は、次のようなものを指します。

$fruit = "apple";
$amount = 3;
$string = "I have $amount $fruits";

想定される出力: "I have 3 apples"
実際の出力: "I have 3 "

もちろん、これは初心者の間違いですが、専門家でも間違いを犯すことがあります。

個人的には、中かっこであろうとなかろうと、変数を補間するのはまったく好きではありません。次のように、コードがはるかに読みやすくなっています。

$string = "I have ".$amount." ".$fruit."s";

Notepad++ で示されているように、コード エディターはこの行を色分けする方が簡単であることに注意してください。

スクリーンショット

繰り返しになりますが、エンジンに補間を行わせることを好む人もいます。

$string = sprintf("I have %d %ss",$amount,$fruit);

それは本当に個人的な好み次第ですが、あなたが引用したガイドラインで指摘されているのは、あなたが書いていることに注意することです.

于 2013-10-16T13:41:09.300 に答える
3

「Greedy」は、「できる限り取得する」ことを指す構文解析の一般的な用語です。反対は、「貪欲でない」または「必要なだけ入手する」です。

変数補間の違いは、たとえば次のとおりです。

$foo = 'bar';
echo "$foos";

ここでのパーサーは、意味のある限り貪欲に解析し$foos、実際に存在する変数 " " ではなく、変数 " " を補間しようとします$foo

正規表現の別の例:

preg_match('/.+\s/', 'foo bar baz')

foo barpattern に適合する最長の文字列であるため、これは貪欲に " " を取得します.+\s。一方で:

preg_match('/.+?\s/', 'foo bar baz')

これは、パターンに一致するために最低限必要な+?" " のみを取得します。foo

于 2013-10-16T13:45:48.497 に答える