变量范围的另一个重要特性是静态变量(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";
- ?>
新闻热点
疑难解答