在看別人專案過程中,看到函式裡面很多static修飾的變數,關於static修飾的變數,作用域,用法越看越困惑,所以查了下資料。
static用法如下:
1.static 放在函式內部修飾變數
2.static放在類裡修飾屬性,或方法
3.static放在類的方法裡修飾變數
4.static修飾在全域性作用域的變數
所表示的不同含義如下:
1.在函式執行完後,變數值仍然儲存
如下所示:
<?php
function teststatic()
teststatic(); //output 1
teststatic(); //output 2
teststatic(); //output 3
?>
2.修飾屬性或方法,可以通過類名訪問,如果是修飾的是類的屬性,保留值
如下所示:
<?php
class person
static function getid()
}echo person::$id; //output 0
echo "
";$p1=new person();
$p2=new person();
$p3=new person();
echo person::$id; //output 3
?>
3.修飾類的方法裡面的變數
如下所示:
<?php
class person
}echo person::tellage(); //output 'the age is: 1'
echo person::tellage(); //output 'the age is: 2'
echo person::tellage(); //output 'the age is: 3'
echo person::tellage(); //output 'the age is: 4'
?>
4.修飾全域性作用域的變數,沒有實際意義(存在著作用域的問題,詳情檢視)
如下所示:
<?php
static $name = 1;
$name++;
echo $name;
?>
另外:考慮到php變數作用域
<?php
include 'chromephp.php';
$age=0;
$age++;
function test1()
function test2()
test1();
test2();
chromephp::log($age); //outpuut 1
?>
可以看出:這3個變數是不相互影響的,另外,php裡面只有全域性作用域和函式作用域,沒有塊作用域
如下所示:
<?php
include 'chromephp.php';
$age = 0;
$age++;
for ($i=0; $i<10; $i++)
chromephp::log($i); //output 10;
chromephp::log($age); //output 11;
?>
php 靜態變數static
靜態變數只存在於函式作用域內,也就是說,靜態變數只存活在棧中。一般的函式內變數在函式結束後會釋放,比如區域性變數,但是靜態變數卻不會。就是說,下次再呼叫這個函式的時候,該變數的值會保留下來。只要在變數前加上關鍵字static,該變數就成為靜態變數了。functiontest 第一次執行,nm tes...
PHP的static靜態變數
靜態變數只存在於函式作用域內,也就是說,靜態變數只存活在棧中。一般的函式內變數在函式結束後會釋放,比如區域性變數,但是靜態變數卻不會。就是說,下次再呼叫這個函式的時候,該變數的值會保留下來。只要在變數前加上關鍵字static,該變數就成為靜態變數了。01 02functiontest 03 08 0...
PHP重置static靜態變數
php重置static靜態變數 1 todo 贈送虛擬幣類 class givencoin,max coin givenhealthgold json decode givenhealthgold,true 操作乙個靜態關鍵字 given money givenhealthgold given co...