Static方法php
A. php中怎麼調用方法中的靜態變數
看看下面的實例:
<?php
function Test()
{
$w3sky = 0;
echo $w3sky;
$w3sky++;
}
?>
本函數每次調用時都會將 $w3sky 的值設為 0 並輸出 "0"。將變數加一的 $w3sky++ 沒有其到效果,因為一旦退出本函數則變數 $w3sky 就不存在了。
要寫一個不會丟失本次計數值的計數函數,要將變數 $w3sky 定義為靜態(static)的:
如下:
<?php
function Test()
{
static $w3sky = 0;
echo $w3sky;
$w3sky++;
}
?>
B. php中static 靜態變數和普通變數的區別
php中static 靜態變數和普通變數的區別:
在變數的前面加上static 就構成了靜態變數(static 變數)。
static變數和普通變數的區別在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。 而靜態全局變數則限制了其作用域, 即只在定義該變數的源文件內有效, 在同一源程序的其它源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用, 因此可以避免在其它源文件中引起錯誤。
C. PHP中this,self和static的區別
PHP支持類和面向對象結構,PHP的類的靜態函數和變數不與任何特定類的實例相關聯(換句話說,一個對象)。
相反,靜態函數和變數與類定義本身相關聯。換言之,一個類的所有實例都共享相同的靜態變數。在一個類的方法(函數)的上下文中,靜態變數和函數被訪問使用self::,在一個類的對象(實例)的上下文中使用其他方法和變數時用this。
靜態函數只能使用靜態變數,靜態函數和變數的引用是通過 self::函數名() 和 self::變數名。上述實例中,靜態變數的引用是由類名(exampleClass::$foo),或者self::(self::$foo),當在這個類的靜態方法[稱為 靜態函數()]里使用時。類的正則函數和變數需要一個對象上下文來引用,他們不能脫離對象上下文而存在。對象上下文由$this提供。在上述函數中,$bar 是一個正則變數,所以它被 $obj->bar(上下文使用變數obj) 來引用,或者使用 $this->bar(再次在一個對象的方法里在一個對象上下文中) 來引用。
self 不使用前面的 $,因為 self 不意味著是一個變數而是類結構本身。而 $this 引用一個特定的變數,所以有前面的 $ 。
D. 說說php面向對象編程時static,public,private,protected 各有什麼意義
staticpublic與publicstatic是等價的,這兩者只是兩個修飾符的順序不同。根據oracle.com教材中第八章的描述,如果兩個或兩個以上的(不同的)欄位修飾符出現在欄位聲明,它們出現的順序需與FieldModifier一致,這只是習慣,但不是必需的。部分修飾符說明:public是訪問許可權修飾符,用於控制外界對類內部成員的訪問,聲明為public的對象成員是完全共有的,外界可以隨意訪問,除此之外還有private,protected和默認。static控制類成員變化的修飾符。static是靜態成員修飾符,其修飾的靜態變數脫離具體對象獨立存在,在內存中之後一份拷貝,所有的對象都公用這一個存儲空間,所以對static修飾的靜態變數進行的修改對該類的所有對象都起作用。static修飾的靜態函數代表所有對象的統一操作,只能調用靜態變數。static是針對面向對象中的「多態」而提出來的,static修飾的靜態成員不存在多態性。附:FieldModifier順序
E. php static 方法有什麼好處
靜態方法不需要所在類被實例化就可以直接使用。
靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀。
靜態方法和靜態變數創建後始終使用同一塊內存,而使用實例的方式會創建多個內存。
