静态变量static
2013-07-17 22:50:51;  来源:追太阳;  作者:逐日者;  评论:0 点击:

PHP支持声明函数变量为静态的(static)。一个静态变量在所有对该函数的调用之间共享,并且仅在脚本的执行期间函数第一次被调用时被初始化。...

PHP支持声明函数变量为静态的(static)。一个静态变量在所有对该函数的调用之间共享,并且仅在脚本的执行期间函数第一次被调用时被初始化。要声明函数变量为静态的用关键字static。通常,静态变量的第一次使用时赋予一个初始值。

静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。

只要在变量前加上关键字static,该变量就成为静态变量了。

<?php
function test()
{
static $nm = 1;
$nm = $nm * 2;
print $nm."<br />";
}

// 第一次执行,$nm = 2
test();
// 第一次执行,$nm = 4
test();
// 第一次执行,$nm = 8
test();

//结果:2 4 8
?>

例如在实际应用当中,ThinkPHP当中的C函数(全局获取配置参数等)就是利用了static变量的典型例子。(如果你还没有接触过TinkPHP或没有PHP基础,那么下面的例子只供参考,不必深究。)

/**
* 获取和设置配置参数 支持批量定义
* @param string|array $name 配置变量
* @param mixed $value 配置值
* @return mixed
*/

function C($name=null, $value=null) {
   static $_config = array();

   // 无参数时获取所有
   if (empty($name)) {
      if(!empty($value) && $array = S('c_'.$value)) {
         $_config = array_merge($_config, array_change_key_case($array));
      }
      return $_config;
   }

   // 优先执行设置获取或赋值
   if (is_string($name)) {
      if (!strpos($name, '.')) {
         $name = strtolower($name);
         if (is_null($value))
            return isset($_config[$name]) ? $_config[$name] : null;
         $_config[$name] = $value;
         return;
      }

   // 二维数组设置和获取支持
         $name = explode('.', $name);
         $name[0] = strtolower($name[0]);
         if (is_null($value))
            return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;
         $_config[$name[0]][$name[1]] = $value;
         return;
   }
      // 批量设置
   if (is_array($name)){
      $_config = array_merge($_config, array_change_key_case($name));
      if(!empty($value)) {// 保存配置值
         S('c_'.$value,$_config);
      }
      return;
   }
   return null; // 避免非法参数
}   

(静态变量在面向对象的应用当中,静态变量$nm属于类,而不属于类的某个实例。这个变量对所有实例都有效。
::是作用域限定操作符,这里用的是self作用域,而不是$this作用域,$this作用域只表示类的当前实例,self::表示的是类本身。在后面的面向对象章节当中你将会得到关于此方面更详细的内容。) 本文属追太阳原创文章,转载请声明出处:http://www.zhuitaiyang.com/html/2013/phpchapter5_0717/250.html逐日者_追太阳

相关热词搜索:静态 变量

上一篇:变量的范围
下一篇:PHP函数 参数的传递

收藏
回到顶部