PHP之static靜態變數詳解(二)

2021-09-07 06:50:17 字數 1899 閱讀 3240

在看別人專案過程中,看到函式裡面很多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...