drupal7 中drupal_static函数源码分析
我们在学习drupal7中,经常在看到函数中调用drupal_static()函数做静态缓存,提高函数的效率。在drupal_static()函数中,用到了PHP的static静态变量知识,这对于在同一个代码文件中,反复调用同一个函数,而函数的结果又可以做缓存处理时,是非常有用的。在drupal7中有如下两个函数:
drupal_static($name,$default_value = NULL,$reset = FALSE);
drupal_static_reset($name = NULL);
drupal7的API代码如下:
https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/drupal_static/7.x
function&drupal_static($name,$default_value=NULL,$reset=FALSE){static$data=array(),$default=array();//Firstcheckifdealingwithapreviouslydefinestaticvaribaleif(isset($data[$name])||array_key_exists($name,$data)){//不为空$name$data[$name]$default[$name]静态变量也存在if($reset){$data[$name]=$default[$name];}return$data[$name];}//$data[$name]或者$default[$name]都不存在静态变量中if(isset($name)){if($reset){//在默认设置之前调用重置而且必须返回一个变量return$data;}$default[$name]=$data[$name]=$default_value;return$data[$name];}//当$name==NULL重置所有foreach($defaultas$name=>$value){$data[$name]=$value;}//Asthefunctionreturnsareference,thereturnshouldalwaysbeavariablereturn$data;}//drupal_static_reset()的参考代码functiondrupal_static_reset($name=NULL){drupal_static($name,NULL,TRUE);}
针对上面两个函数,测试代码如下:
可做静态缓存案例
functiontest1(){$result=false;$result=&drupal_static(__FUNCTION__);if(!$result){error_log('test1test1test1test1test1');$result='gettest1';}return$result;}$a=test1();echo$a;//gettest1输出error_log日志$b=test1();echo$b;//gettest1但不会有error_log日志
2. 可恢复静态变量初始值测试
functiontest1(){static$result=1;$result=&drupal_static(__FUNCTION__,1);echo$result;$result++;}$a=test1();echo$a;//1$b=test1();echo$b;//2drupal_static_reset('test1');//此处将静态变量又重置为初始值$c=test1();echo$c;//1
以上代码仅供参考,具体使用请参看drupal7官方文档
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。