靜態變量只存在於函數作用域內,也就是說,靜態變量只存活在棧中。一般的函數內變量在函數結束後會釋放,比如局部變量,但是靜態變量卻不會。就是說,下次再調用這個函數的時候,該變量的值會保留下來
最簡單定義方法
define() 函數定義一個常量。
常量類似變量,不同之處在於:
在設定以後,常量的值無法更改
常量名不需要開頭的美元符號 ($)
作用域不影響對常量的訪問
常量值只能是字符串或數字
語法
define(name,value,case_insensitive)
class foo {
static $my_static = 5;
public $my_prop = 'bla';
}print foo::$my_static; copyright dedecms
$obj = new foo;
print $obj->my_prop;
?>
const 是常量,即從程序運算開始到結束,數值不變的量。
class say_const{
const charset=”中國”;
publice function say_hello(){
echo slef::charset;
}
}
$const1=new say_const()’
$const1->say_hello();
?>
輸出就是“中國”
下面一款完整的靜態變量
function write_file($file,$msg,$usecheck=5){
static $check=1;//這裡用到了~
$f=@fopen($file,"a+b");
if($f){
if(flock($f,lock_ex)){
fwrite($f,$msg);
flock($f,lock_un);
fclose($f);
}else{
fclose($f);
$check++;
if($check<=$usecheck){
sleep(1);//暫停下程序,等其他進程釋放該資源
write_file($file,$msg);
}
}
}else{
$check++;
if($check<=$usecheck){
sleep(1);//暫停下程序,等其他進程釋放該資源
write_file($file,$msg);
}
}
}