ホームページ > バックエンド開発 > PHPチュートリアル > PHP 変数識別子のいくつかのルール

PHP 変数識別子のいくつかのルール

WBOY
リリース: 2016-06-13 13:02:07
オリジナル
824 人が閲覧しました

PHP 変数識別子のいくつかのルール

PHP 変数識別子は非常に特別な利便性を提供します。しかし、長年PHPに携わっているプログラマーの中には、その具体的な使い方が明確になっていない人も少なくなく、失敗したときにどこで間違えたのか分からないということもあります。それでは、まとめます。誰でも簡単にすぐにマスターできます。
PHP 変数の操作メカニズムは、変数識別子 $ の後の文字列、または式の演算結果の文字列を変数名として使用し、変数プールに移動して変数値を取得します。
PHP は変数の「名前ポインター」を提供することと同等であることがわかります。 C++ アドレス ポインタとは異なり、null アドレスの危険性がありません。変数メモリのオーバーフローの問題も発生しません。この PHP はすべて私たちのために行われます。
変数識別子:
$: 次の文字列を変数名として使用し、同じ名前の変数を取得します。
?? $a='Hello';
?? $$a = 'world';
{} 式を文字列に解析し、この文字列の変数を取得します。{} 単独では存在できません式の外側にある場合、それはプロセス制御とみなされ、エラーが報告されます。つまり、{} の前に $ があるか、外側に引用符がなければなりません。
エコー $a, ${$a}; エコー $a, $$a;

この 2 つの違い: $ は常にその後の最初の文字列を検索し、{} は内部式を文字列に解析します。 PHP は、このメソッドを使用して変数の「名前ポインタ」を実装します。

${}: {} によって返された文字列は、さらなる処理のために $ に渡されます。目的: 式の結果の変数を取得します。
?例: ${$array[$i][$j]}、$$array[$i][$j]} を使用すると、PHP は変数 $$array を見つけます。結果の変数名として $array[$i][$j] を探す代わりに。

関数と式内の

{}
推測してください: 次のプログラムは次の値を返します:

   $a='Hello';
   $$a = 'world';
   echo '1 ', $a, '{$a}', '</br>';
   echo '2 ', $a, "{$a}", '</br>';
   echo '3 ', $a, "{{$a}}", '</br>';   
   echo '4 ', $a, "${$a}", '</br>';   
   echo '5 ', $a, ${$a}, '</br>'; 
   echo '6 ', $a, "{${$a}}", '</br>'; 
   echo '7 ', $a, "{{${$a}}}", '</br>'; 
   echo '8 ', $a, "$$a", '</br>'; 
        echo '9 ', $a, "{a}", '</br>';
        echo '10 ', $a, "${a}", '</br>';
ログイン後にコピー

?

結果:

?? echo '1 ', $a, '{$a}', '
';
出力は次のとおりです: 1 Hello{$a}?

//通常の状況では、一重引用符は実行不可能な文字列であり、元の結果が返されます。ただし、Smarty も解析します。 !したがって、Smarty テンプレートでは、「{$a}」のような式は依然として望ましくない結果を生成する可能性があります。 !

場合: str_replace('{$foo} ',$foo, '{$foo}.some');
上記の理由により、次のように変更する必要があります:
? ('{' , '$foo',} '),array('',$foo, ''), '{$foo}.some');

?? echo '2 ', $a, "{$a}", '
';

出力は次のとおりです: 2 HelloHello
二重引用符で囲むと、{} またはそうでない場合、変数は常に解析されます。
?? echo '3 ', $a, "{{$a}}", '
';??
出力は次のとおりです: 3 Hello{Hello}?したがって、{} で結果を出力したい場合は、2 つのレイヤーを追加する必要があります。
?? echo '4 ', $a, "${$a}", '
';?
出力は次のとおりです: 4 Helloworld
?? a , ${$a}, '
';
出力は次のとおりです: 4 Helloworld
// ${$expression}、外側に二重引用符があるかどうかに関係なく、結果は同じです?

?? echo '6 ', $a, "{${$a}}", '
';?

出力は次のとおりです: 6 Helloworld

?? , $a, "{{${$a}}}", '
'
出力は次のとおりです: 7 Hello{world}
//{} で結果を出力するには、次のようにします。もう 1 つのレイヤーを追加する必要があります。
echo '8 ', $a, "$$a", '
';
出力は次のとおりです: 8 Hello$Hello
//二重引用符内の $ は 1 回だけ実行されます。 。したがって、結果はあなたが望むものではありません。

注: {} は配列、つまり配列の添字アクセスにも使用できます。つまり、

$array[$i][$j] と $array{$i}{$j} は同等です。ただし、PHP ドキュメントでは [] となっているため、これは正常です。文字列はバイト配列なので、バイト配列モードで文字列にアクセスする場合は、 {}

$a='ux:Cache'; $a{2}=''; のみを使用します。 ?
echo '9 ', $a, "{a}", '
';
出力は次のようになります: 9 Hello{a}
?? echo '10 ', $a, " ${a}", '
';
出力は次のとおりです: 10 HelloHello は、{} の外側に $ があることを確認でき、{} は分析のために結果を $ に送信します。

概要: 二重引用符で囲まれた
$ は 1 回だけ解析されます。複数の解析は行われません。 echo "$$a" が echo "${$a}" に変更された場合、$ が {$foo} になったときに
{} が解析されます。 {} で結果を出力するには、{{$foo}}
$ は文字列を逆方向に検索するため、配列または式の結果を
$$array[$i][$j ] にすることはできません。代わりに、${$array[$i][$j]}

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート