變量范圍的另一個重要特性是靜態變量(static variable),靜態變量僅在局部函數域中存在,但當程序執行離開此作用域時,其值并不丟失,看看下面的例子:
- class test
- {
- public static function a(){}
- public function b(){}
- }
- $obj = new test;
- //調用 代碼如下:
- test::a();
- $obj->a();
- $obj->b();
例子,演示需要靜態變量的例子:
- <?php
- class myobject {
- public static $mystaticvar = 0;
- function mymethod() {
- // ::為作用域限定操作符
- // 用的self作用域而不是$this作用域
- // 因為$this只表示類的當前實例,而self::表達的是類的本身
- self::$mystaticvar += 2;
- echo self::$mystaticvar . "<br />";
- }
- }
- $instance1 = new myobject();
- $instance1->mymethod(); // 顯示 2
- $instance2 = new myobject();
- $instance2->mymethod(); // 顯示 4
- ?>
- <?php
- class myobject {
- public static $myvar = 10;
- }
- echo myobject::$myvar;
- // 結果: 10
- ?>
本函數沒什么用處,因為每次調用時都會將 $w3sky 的值設為 0 并輸出 "0",將變量加一的 $w3sky++ 沒有作用,因為一旦退出本函數則變量 $w3sky 就不存在了,要寫一個不會丟失本次計數值的計數函數,要將變量 $w3sky 定義為靜態的:
例子,使用靜態變量的例子:
- <?php
- function test()
- {
- static $w3sky = 0;
- echo $w3sky;
- $w3sky++;
- }
- ?>
現在,每次調用 test() 函數都會輸出 $w3sky 的值并加一.看個實例:
- <?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 . "n";
- $foo = new foo();
- print $foo->staticvalue() . "n";
- print $foo->my_static . "n"; // undefined "property" my_static
- print $foo::$my_static . "n";
- $classname = 'foo';
- print $classname::$my_static . "n"; // php 5.3.0之后可以動態調用
- print bar::$my_static . "n";
- $bar = new bar();
- print $bar->foostatic() . "n";
- ?>
新聞熱點
疑難解答