在php中static是一個靜態變量,他可以定義函數,變數為全域靜態變數了,那麼我們在函數或變數前面加上static就會對函數與變數產生怎麼樣的影響呢,下面我們就一起來看看。
1) 全域變數(外部變數)的說明之前再冠以static 就構成了靜態的全域變數。全域變數本身就是靜態儲存方式, 靜態全域變數當然也是靜態儲存方式。 這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域變數的作用域是整個原始程序, 當一個原始程式由多個來源檔案組成時,非靜態的全域變數在各個來源檔案中都是有效的。 而靜態全域變數則限制了其作用域, 即只在定義該變數的來源檔案內有效, 在同一原始程式的其它來源檔案中不能使用它。由於靜態全域變數的作用域局限於一個原始檔案內,只能為該來源檔案內的函數公用,因此可以避免在其它原始檔案中引起錯誤。
2) 從上述分析可以看出, 把局部變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。
3) static函數與普通函數作用域不同,僅在本文件。只在目前原始檔中使用的函數應該說明為內部函數(static),內部函數應該在目前原始檔中說明和定義。對於可在目前原始檔以外使用的函數,應該在一個頭檔中說明,要使用這些函數的原始檔要包含這個頭檔
PHP5.3.0之後,我們可以用一個變數來動態調用類。但該變數的值不能為關鍵字self, parent 或static。
Example #1 靜態成員程式碼範例
<?php class Foo { public static $my_static = 'foo'; public function staticValue() { return self::$my_static; } } class Bar extends Foo { public function fooStatic() { return parent::$my_static; } } print Foo::$my_static . " "; $foo = new Foo(); print $foo->staticValue() . " "; print $foo->my_static . " "; // Undefined "Property" my_static print $foo::$my_static . " "; $classname = 'Foo'; print $classname::$my_static . " "; // PHP 5.3.0之后可以动态调用 print Bar::$my_static . " "; $bar = new Bar(); print $bar->fooStatic() . " "; ?>
Example #2 靜態方法程式碼範例
<?php class Foo { public static function aStaticMethod() { // ... } } Foo::aStaticMethod(); $classname = 'Foo'; $classname::aStaticMethod(); // As of PHP 5.3.0 ?>
關於Static關鍵字在類別中的使用, PHP手冊給如下的約定:
1、宣告類別成員或方法為static,就可以不實例化類別而直接存取。不能透過一個物件來存取其中的靜態成員(靜態方法除外)。
2、由於靜態方法不需要透過物件即可調用,所以偽變數$this在靜態方法中不可用。
3、靜態屬性不可以由物件透過->操作符來存取。
4、用::方式呼叫一個非靜態方法會導致一個E_STRICT等級的錯誤。
現在來關註一下第4條約定。
運行環境: (Win32) PHP/5.3.3
class Foo{ public static $my_static = 'foo';//声明一个静态成员 public function staticValue() {//静态方法 return self::$my_static;// } public function run(){//非静态方法 return "abc <br>"; } public function callrun() { return self::run();//用self::方式调用一个非静态方法 } } echo Foo::$my_static . "<br >"; echo Foo::run();//用className::方法名调用非静态方法 echo Foo::callrun();
static關鍵字作用:
PHP中static變數的使用範圍要更廣一些,我們不僅可以在類,方法或變數前面加上static修飾符,我們甚至可以為函數內部變數加入static關鍵字。新增了static修飾符的變數即使在該函數執行完畢值仍然不會遺失,也就是說,在下次呼叫這個函數時,變數仍然記得原來的值。
以上是php中static關鍵字在函數中的用法實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!