【 変数のパース 】

1. 概要
2. 単純な(変数用の)構文
3. 複雑な(変数用の)構文

パース = 置き換え
  • スクリプトが2重引用符で括られるかヒアドキュメントで指定された場合、
    その中の変数はパースされます。

  • 構文の型には、単純な(変数用の)構文複雑な(変数用の)構文の2種類
    があります


  • ドル記号($)を見付けるとパーサは、有効な変数名を形成することが可能な最長のトークンを取得し、
    置き換えます
  • $abcd = "変数の内容";
    print "1) \$abcd = $abcd<br>";
    print "2) \$abcd = $abcd_xyz<br>";
    print "3) \$abcd = {$abcd}_xyz<br>";
    print "4) \$abcd = $abcd}_xyz<br>";
    print "5) \$abcd = ${abcd}_xyz<br>";
    print "6) \$abcd = { $abcd}_xyz<br>";
    


    1) $abcd = 変数の内容
    2) $abcd = 
    3) $abcd = 変数の内容_xyz
    4) $abcd = 変数の内容}_xyz
    5) $abcd = 変数の内容_xyz
    6) $abcd = { 変数の内容}_xyz
    
  • このサンプルの示している事実は二つあります
  • 波型括弧の使用規則
  • 変数である事をパーサに明示するのに、変数を波型括弧で挟む

  • { と $ の間にスペースが入ってはならない


  • {$ の扱いが以降で重要になります、それは「PHP 3からPHP 4への移行」で以下のように示されています

  • PHP 4では文字列中の新しい変数置換の機構が追加されています。文字列中の多次元配列からオブ
    ジェクトのメンバ変数と要素にアクセスが可能となっています

  • これを行うには、開き括弧の直後にドル記号が付くように変数を波括弧で 括る必要があります。 {$...}


  • {$...}の利用
  • 多次元配列や、オブジェクト内の配列表現に使用します


  • 一次元配列の場合
    $abcd = array(1,2,3,4);
    print "1) \$abcd = $abcd[0]<br>";
    print "2) \$abcd = $abcd[0]_xyz<br>";
    print "3) \$abcd = {$abcd[0]}_xyz<br>";
    print "4) \$abcd = $abcd[0]}_xyz<br>";
    print "5) \$abcd = ${abcd[0]}_xyz<br>";
    print "6) \$abcd = { $abcd[0]}_xyz<br>";
    


    1) $abcd = 1
    2) $abcd = 1_xyz
    3) $abcd = 1_xyz
    4) $abcd = 1}_xyz
    5) $abcd = 1_xyz
    6) $abcd = { 1}_xyz
    


  • ニ次元配列の場合
    $abcd = array(array(1,2),array(1,2),array(1,2),array(1,2));
    print "1) \$abcd = $abcd[3][1]<br>";
    print "2) \$abcd = $abcd[3][1]_xyz<br>";
    print "3) \$abcd = {$abcd[3][1]}_xyz<br>";
    print "4) \$abcd = $abcd[3][1]}_xyz<br>";
    #print "5) \$abcd = ${abcd[3][1]}_xyz<br>"; エラーです
    print "6) \$abcd = { $abcd[3][1]}_xyz<br>";
    


    1) $abcd = Array[1]
    2) $abcd = Array[1]_xyz
    3) $abcd = 2_xyz
    4) $abcd = Array[1]}_xyz
    6) $abcd = { Array[1]}_xyz
    


  • 連想配列と、オブジェクト内の配列の場合
    #print "METHOD = $_SERVER['SCRIPT_NAME']<br>";  エラーとなります
    print "METHOD = {$_SERVER['SCRIPT_NAME']}<br>";
     
    class myvar {
       var $var;
       function myvar() {
          $this->var = array(1,2,3,4);
       }
    }
     
    $a = new myvar();
    print "class array = $a->var[0]<br>";
    print "class array = {$a->var[0]}<br>";
    


    METHOD = /winofphp/action.php
    class array = Array[0]
    class array = 1