PHP の「貪欲なトークン解析」とは何ですか? Codeigniterガイドラインでこれを見つけました:
「変数を解析する必要がない限り、常に一重引用符で囲まれた文字列を使用し、変数を解析する必要がある場合は、中括弧を使用して貪欲なトークン解析を防ぎます。」
「私の文字列 {$foo}」
適切な説明付きの回答が役立ちます。
ありがとう !!
PHP の「貪欲なトークン解析」とは何ですか? Codeigniterガイドラインでこれを見つけました:
「変数を解析する必要がない限り、常に一重引用符で囲まれた文字列を使用し、変数を解析する必要がある場合は、中括弧を使用して貪欲なトークン解析を防ぎます。」
「私の文字列 {$foo}」
適切な説明付きの回答が役立ちます。
ありがとう !!
貪欲なトークン解析は、次のようなものを指します。
$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);
それは本当に個人的な好み次第ですが、あなたが引用したガイドラインで指摘されているのは、あなたが書いていることに注意することです.
「Greedy」は、「できる限り取得する」ことを指す構文解析の一般的な用語です。反対は、「貪欲でない」または「必要なだけ入手する」です。
変数補間の違いは、たとえば次のとおりです。
$foo = 'bar';
echo "$foos";
ここでのパーサーは、意味のある限り貪欲に解析し$foos
、実際に存在する変数 " " ではなく、変数 " " を補間しようとします$foo
。
正規表現の別の例:
preg_match('/.+\s/', 'foo bar baz')
foo bar
pattern に適合する最長の文字列であるため、これは貪欲に " " を取得します.+\s
。一方で:
preg_match('/.+?\s/', 'foo bar baz')
これは、パターンに一致するために最低限必要な+?
" " のみを取得します。foo