PHP面接-変数知識点整理

7641 ワード

一、変数の定義
1.変数の命名規則
変数名には、アルファベット、数値、下線を含めることができ、数値で始まることはできません.
$Var_1 = 'foo'; //   
$var1 = 'foo'; //   
$_var1 = 'foo'; //   
$Var-1 = 'foo'; //   ,     -
$1_var = 'foo'; //   ,       

ここでいうアルファベットはa-z,A-Z,およびASCII文字は127から255(0 x 7 f-0 xff)である.
そのため、実際に中国語変数名を使うのも合法的です.
中国語の句読点まで変数名として使用するのは合法的です.
ただ一般的にはお勧めしません.
$   = 'foo'; //   
$?。…… = 'foo'; //   。

変数名の大文字と小文字の区別
$var = 'Bob';
$Var = 'Joe';
echo "$var, $Var";      //    "Bob, Joe"

$thisは特殊な変数で、値を割り当てることはできません.
$this = 'foo'; // Fatal error: Cannot re-assign $this

2.変数の付与
変数の参照付与と転送値付与詳細転送ゲート:変数の参照付与と転送値付与
トランスファわりあて
変数のデフォルトでは、常に値の割り当てが行われます.すなわち、1つの式の値を変数に与えると、元の式全体の値がターゲット変数に割り当てられる.これは、例えば、1つの変数の値が別の変数に与えられると、1つの変数の値を変更しても、他の変数には影響しないことを意味する.
$foo = 'Bob';     //   'Bob'    $foo
$bar = $foo;      //    $foo       $bar
$bar = 'Jack';        //    $bar   
echo $foo;          // $foo      ,    'Bob'

参照代入
参照付与は、新しい変数の単純な参照(換言すれば、「別名になる」または「指向する」)が元の変数である.新しい変数を変更すると、元の変数に影響します.逆も同様です.
参照代入を使用するには、代入する変数の前(ソース変数)に1つの&記号を追加するだけです.
$foo = 'Bob';        //   'Bob'    $foo
$bar = &$foo;     //    $bar    $foo
$bar = 'Jack';     //    $bar   
echo $foo;           // $foo         'Jack'

付与値を参照できるのは、名前付き変数のみです.
$foo = 25;
$bar = &$foo;      //      
$bar = &(24 * 7);  //   ;           

function test()
{
   return 25;
}

$bar = &test();    //   

3.変数の初期化
PHPでは変数を初期化する必要はありませんが、変数を初期化するのは良い習慣です.
初期化されていない変数のデフォルト値
初期化されていない変数には、そのタイプのデフォルト値があります.
  • ブールタイプの変数のデフォルト値はFALSE
  • です.
  • 整形および浮動小数点型変数のデフォルト値は0
  • 文字列型変数デフォルト値は空の文字列""
  • 配列変数のデフォルト値は空の配列array()
  • 4.可変変数
    可変変数とは、変数の変数名を動的に設定して使用できることを意味します.
    1つの可変変数は、この可変変数の変数名として通常の変数の値を取得します.次の例ではhelloが2つのドル記号($)を使用すると、可変変数の変数として使用できます.
    $a = 'hello';
    
    $$a = 'world';

    このとき,両方の変数は,$aの内容が「hello」であり,$helloの内容が「world」であると定義される.
    したがって、次の文は次のとおりです.
    echo "$a ${$a}";

    次の文とまったく同じ結果を出力します.
    echo "$a $hello";

    それらはすべて出力します:hello world.
    可変変数配列
    可変変数を配列に使用するには、あいまいな問題を解決する必要があります.これは、$$a[1]と書く場合、解析器は、$a[1]を変数として取得するか、または$ $aを変数として取得し、その変数のインデックスが[1]である値を取得するかを知る必要がある.この問題を解決する文法は,第1のケースに対して${$a[1]}を用い,第2のケースに対して${$a}[1]を用いる.
    クラスに可変変数
    クラスのプロパティは、可変プロパティ名でアクセスすることもできます.可変属性名は、呼び出しの範囲内で解析されます.たとえば、$foo->$bar式の場合、$barはローカル範囲で解析され、その値は$fooの属性名に使用されます.$barが配列単位である場合も同様である.
    カッコ{}を使用して、属性名の境界を明確にすることもできます.最も有用なのは、属性が配列内にある場合、または属性名パケットが複数の部分を含む場合、または属性名パケットが不正な文字を含む場合(例えば、json_decode()またはSimpleXML).
    json形式の文字列をphpオブジェクトに変換します.
    $string = '{"os-version":"10.3.1","1day":24}';
    $obj = json_decode($string);
    print_r($obj);

    出力結果:
    stdClass Object
    (
        [os-version] => 10.3.1
        [1day] => 24
    )

    この場合、オブジェクト$objのos-version属性または1day属性にアクセスするには、$obj->os-versionを直接使用し、$obj->1dayアクセスすると必ずエラーが発生します.
    正しいアクセス方法:
    echo $obj->{"os-version"};
    echo '
    '; echo $obj->{"1day"};

    出力結果:
    10.3.1
    24

    二、変数の作用域と静的変数
    1.変数の役割ドメイン
    変数の役割ドメインは、変数の範囲、すなわち定義されたコンテキストバックグラウンド(すなわち、その有効範囲)とも呼ばれます.php変数の範囲スパンにはincludeとrequireが導入したファイルも含まれています.
    ローカル変数
    ユーザー定義関数では、ローカル関数の範囲が導入されます.関数内部の変数に使用される任意の役割ドメインは、ローカル関数の範囲内に制限されます.例:
    $outer = 'str'; /*      */
    
    function myfunc()
    {
        echo $outer; /*            */
    }
    
    myfunc();

    このスクリプトには出力はありません.echo文はローカルバージョンの変数$outerを参照し、この範囲内では値が割り当てられていないためです.
    グローバル変数
    globalキーワード
    $outer = 'str'; //   
    
    function myfunc()
    {
        global $outer;
        echo $outer; //   
    }
    myfunc();

    このスクリプトはstrを出力します.関数でglobalキーワードを使用してグローバル変数$aおよび$bを宣言すると、任意の変数へのすべての参照がグローバルバージョンを指します.1つの関数で宣言できるグローバル変数の最大個数については、PHPは制限されません.
    $GLOBALSスーパーグローバル配列$GLOBALS-グローバル役割ドメインで使用可能なすべての変数を参照
    $outer = 'str'; //   
    
    function myfunc()
    {
        echo $GLOBALS['outer'];
    }
    myfunc();

    このスクリプトはstrを出力します.$GLOBALSは関連配列であり、各変数は要素であり、キー名は変数名に対応し、値は変数の内容に対応する.$GLOBALSがグローバル範囲内に存在するのは、$GLOBALSがスーパーグローバル変数であるためである.
    スーパーグローバル変数
    PHPの定義済み変数の多くは「スーパーグローバル」であり、スクリプトのすべての役割ドメインで使用できることを意味します.関数またはメソッドでglobal$variableを実行する必要はありません.アクセスできます.
    これらのスーパーグローバル変数は次のとおりです.$GLOBALS-スーパーグローバル変数は、すべての役割ドメインで常に利用可能な内蔵変数$_SERVER-サーバと実行環境情報$_GET-HTTP GET変数$_POST-HTTP POST変数$_FILES-HTTPファイルアップロード変数$_COOKIE-HTTP Cookies$_SESSION-Session変数$_REQUEST-HTTP Request変数です.デフォルトでは、$_GET,$_POSTおよび$_COOKIEの配列が含まれています.$_ENV-環境変数
    2.静的変数
    変数範囲のもう一つの重要な特性は静的変数(static variable)である.静的変数はローカル関数ドメインにのみ存在しますが、プログラムがこの役割ドメインから離れると値は消えません.
    静的変数の特徴
    1.staticキーワードで修飾する2.静的宣言はコンパイル時に解析する3.一度だけ初期化4.初期化には5を割り当てる必要がある.関数を実行するたびに、この値は6のままになります.static修飾の変数は局所的であり,関数内部でのみ有効である.関数の呼び出し回数を記録することで、いくつかの条件で再帰を終了できます.
    function myFunc()
    {
        static $a = 1;
        echo $a++;
    }
    myFunc(); // 1
    myFunc(); // 2
    myFunc(); // 3

    変数$aは、最初にmyFunc()関数を呼び出したときにのみ初期化され、その後、myFunc()関数を呼び出すたびに$aの値が出力され、1が加算される.
    静的変数を宣言するときに式の結果で値を割り当てることはできません
    function foo(){
        static $int = 0;        //   
        static $int = 1+2;       //     (          )
        static $int = sqrt(121);      //     (          )
    
        echo $int++;
    }

    静的変数と再帰関数
    静的変数は再帰関数を処理する方法を提供する.再帰関数は、自分を呼び出す関数です.再帰関数を書くときは、無限再帰する可能性があるので注意してください.再帰を中止するには十分な方法があることを確認しなければならない.以下の簡単な関数は10に再帰カウントされ、静的変数$countを使用していつ停止するかを判断します.
    function test()
    {
        static $count = 0;
    
        $count++;
        echo $count;
        if ($count < 10) {
            test();
        }
        $count--;
    }

    3.実例分析
    次のプログラムの出力結果を書き出します
    $count = 5;
    function get_count()
    {
        static $count;
        return $count++;
    }
    
    echo $count;
    ++$count;
    
    echo get_count();
    echo get_count();

    第8行echo $count;出力59行目++$count;,この場合$countの値は6第11行echo get_count();,第1回呼び出しget_count()関数
    function get_count()
    {
        //        $count,     ,      NULL
        static $count;
        // $count++,    $count   ,   。  ,     NULL。
        // NULL        1,  ,     $count = 1
        return $count++;
    }

    1回目の呼び出しget_count()の戻り値はNULLであり、echo NULL;は何も出力されない.
    12行目echo get_count();,2回目の呼び出しget_count()関数
    function get_count()
    {
        //       ,      
        static $count;
        //    $count = 1,$count++,    $count   ,   。  ,     1。
        return $count++;
    }

    1回目の呼び出しget_count()の戻り値は1であり、echo get_count();出力1である.
    プログラム全体の出力結果は51