时间:2021-07-01 10:21:17 帮助过:15人阅读
以下为引用的内容: //要改写的函数也请加上$is_static=1变量,用来控制是否开启 static。 function staticFunc ($var1,$var2,$var3,$is_static=1) { if ( $is_static == 1 )//默认需要缓存函数结果 { static $result_array;//该数组用来保存函数的结果,支持不同参数的结果缓存 $vars_string = serialize( func_get_args() ); if ( empty( $result_array ) )//第一次运行需要初始化 { $result_array = array(); } if ( array_key_exists( $vars_string, $result_array ) )//参数已经存在 { return $result_array[$vars_string];//返回静态变量中已经保存的结果 }else//参数不存在 { $result_array[$vars_string] = '';//后面会把结果补充进来 } }else//不利用static 缓冲结果 { if ( empty( $result_array ) ) { $result_array = array(); } } $result_array[$vars_string] = rand();//获取结果,请把获取的代码放在此处即可 return $result_array[$vars_string]; } echo staticFunc(1,2,3); echo " "; echo staticFunc(2,2,2); echo " "; echo staticFunc(1,2,3); echo " "; echo staticFunc(2,2,2); echo " "; echo staticFunc(3,3,3); echo " "; echo staticFunc(3,3,3,0); echo " "; ?> |
运行上述代码,产生的结果类似:
16667
8888
16667
8888
2193
1014
可以看出,第1行和第3行的结果一致,第2行和第4行的结果一致,说明只要函数的参数相同,函数结果就进行了有效的“cache”。
从第4行和第5行,可以看出,通过设置$is_static变量能有效控制是否开启“cache”。
补充:上述使用static方法,可以有效的避免在一个线程内,重复读取数据,但是该cache只存在一个线程内,不同线程是相互独立的。虽然只是线程内的函数结果“cache”,但是其原理和其他方式的cache是类似的,就是要针对不同的参数(不同的情况)构造出cache的key。
转自:http://www.cnblogs.com/rethink/
http://www.bkjia.com/PHPjc/364345.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/364345.htmlTechArticle在较复杂的web程序开发中,由于采用面向对象的数据操作方式,或者业务逻辑太过复杂,开发人员在开发过程中,经常会无意识的重复读取...