萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP的變量類型和作用域詳解

PHP的變量類型和作用域詳解

 什麼是變量的作用域?變量的作用域是指在腳本的一次生命周期內變量的有效范圍。一般來說有全局和局部之分

PHP中變量的作用域可以分為:超全局(全局變量的特殊類型,在局部范圍裡可直接使用),全局,局部,靜態(是局部變量的特殊類型) 在PHP中,全局變量實際上是靜態全局變量,如果不用unset顯式的釋放,那麼等腳本運行結束全局變量才會被釋放掉 局部靜態變量細分可以是 局部靜態函數變量(函數中聲明的static變量),局部靜態成員變量(類中聲明的 static 屬性,被所有類實例共享) 局部靜態變量只有腳本運行結束才會被自動釋放   超全局變量:在一個腳本的任何作用域裡都可以被訪問,這些都是PHP內置的    代碼如下: $GLOBALS $_SERVER $_GET $_POST $_FILES $_SESSION(持久化存儲) $_COOKIE(持久化存儲) $_REQUEST $_ENV 全局變量:聲明的變量不在class,function,if等語言結構內部,如果要在class,function,if等語言內部使用,需要用關鍵詞global或者超全局變量$GLOBALS   靜態變量: 在function中使用關鍵詞static聲明的變量,靜態變量的值保留直至腳本結束 局部變量:在class,function,if/while/for等結構語句內部聲明的變量   1.global關鍵詞和$GLOBALS實例 代碼如下:<?php $a = 0; function foo() {     global $a;     echo $a; } function foo2() {     echo $GLOBALS['a']; } 2.static 變量和普通局部變量區別實例 代碼如下:<?php function foo1() {     $var = 0;     $var++;     return $var; } echo foo1(); echo foo1(); //輸出都是1 function foo () {     static $var = 0;     $var++;     return var; } echo foo(); echo foo(); //第一次輸出1 第二次2 3.static 關鍵詞還可以聲明靜態屬性和靜態方法 靜態屬性只能被類調用,而不能被類實例調用 靜態方法裡不能使用$this,只能用self訪問類的靜態屬性   另外理解static變量的一段代碼:    代碼如下: <?php class t {         static $v = 10;         public function a()         {                 static $var = 10;                 $var++;                 echo $var . "<br>n";         }         public static function aa()         {                 self::$v++;                 echo self::$v . "<br>n";         } } $o1 = new t(); $o1->a();//輸出11 $o2 = new t(); $o2->a();//輸出12 t::aa();//輸出11 $o1->aa();//輸出12 $o2->aa();//輸出13   從上面的代碼中,可知如果一個類成員方法中有靜態變量,即使是不同的類實例,他們也會共享這個靜態變量,盡管這個靜態變量不是類靜態成員變量,這點容易讓人迷惑。  
copyright © 萬盛學電腦網 all rights reserved