static 静态变量

来源:互联网 发布:小田切让的长相知乎 编辑:程序博客网 时间:2024/06/16 23:54

参考链接    http://php.net/manual/zh/language.variables.scope.php#59676


statuc  静态变量只是局部函数域中存在 ,但是一旦离开这个作用域  下次再次调用这个函数时  静态变量并不会丢失。


注意:

引用(地址)并不是静态存储的 eg:

<?phpfunction get_instance_ref() {    static $obj;    echo 'Static object: ';    var_dump($obj);    if (!isset($obj)) {        // 将一个引用赋值给静态变量        echo '将一个引用赋值给静态变量' .PHP_EOL;        $obj = &new stdclass;    }    $obj->property++;    return $obj;}function get_instance_noref() {    static $obj;    echo 'Static object: ';    var_dump($obj);    if (!isset($obj)) {        // 将一个对象赋值给静态变量        echo '将一个对象赋值给静态变量' .PHP_EOL;        $obj = new stdclass;    }    $obj->property++;    return $obj;}$obj1 = get_instance_ref();$still_obj1 = get_instance_ref();echo "\n";$obj2 = get_instance_noref();$still_obj2 = get_instance_noref();
Static object: NULL
将一个引用赋值给静态变量
PHP Notice:  Undefined property: stdClass::$property in /home/data/www/liusen/bmp-mgmt.dianhua.cn/note/09/test2.php on line 12
Static object: NULL
将一个引用赋值给静态变量
PHP Notice:  Undefined property: stdClass::$property in /home/data/www/liusen/bmp-mgmt.dianhua.cn/note/09/test2.php on line 12


Static object: NULL
将一个对象赋值给静态变量
PHP Notice:  Undefined property: stdClass::$property in /home/data/www/liusen/bmp-mgmt.dianhua.cn/note/09/test2.php on line 26
Static object: object(stdClass)#3 (1) {
  ["property"]=>
  int(1)
}





 

静态变量eg:

echo '静态变量开始' . PHP_EOL;function staticTest(){    static $a = 0;    echo $a . PHP_EOL;    $a++;};$i =0;while ($i<10) {    staticTest(); // $a累加    $i++;    sleep(1);}var_dump($a); // Undefined variable: a