1. 建立物件$object = new class(),然後使用」->」呼叫:$object->attribute/function,前提是該變數/方法可訪問.
2. 直接呼叫類方法/變數:class::attribute/function,無論是靜態/非靜態都可以,但是有前提條件.
a. 如果是變數,需要該變數可訪問.
b. 如果是方法,除了該方法可訪問外,還需要滿足.
① 如果是靜態方法,沒有特殊條件.
② 如果是非靜態方法,需要改方法中沒有使用$this,即沒有呼叫非靜態的變數/方法,當然,呼叫靜態的變數/方法沒有問題.
然後我們再看一下使用$object->… 和使用class::… 都有什麼區別:
1. 使用$object->… ,需要執行建構函式建立物件.
2. 使用class::… 呼叫靜態方法/變數,不需要執行建構函式建立物件.
3. 使用class::… 呼叫非靜態方法/變數,也不需要執行建構函式建立物件.
然後奇怪的地方就出來了,既然2和3都一樣,那靜態方法/變數存在還有什麼意義呢?
靜態static:宣告類成員或方法為 static,就可以不例項化類而直接訪問,不能通過乙個物件來訪問其中的靜態成員(靜態方法除外),靜態成員屬於類,不屬於任何物件例項,但類的物件例項都能共享.
例子,**如下:
複製** **如下:
<?php
class person
} class student extends person
} // 輸出成員屬性值
echo person::$country."
"; // 輸出:中國
$p1 = new person();
//echo $p1->country; // 錯www.cppcns.com誤寫法
// 訪問靜態成員方法
person::mycountry(); // 輸出:我是中國人
// 靜態方法也可通過物件訪問:
$p1->mycountry();
// 子類中輸出成員屬性值
echo student::$country."
"; // 輸出:中國
$t1 = new student();
$t1->study(); // 輸出:我是中國人
?>
執行該例子,輸出:
中國 我是中國人
我是中國人
中國 我是中國人
小結:在類內部訪問靜態成員屬性或者方法,使用 self::(注意不是 $slef),**如下:
複製** **如下:
slef:: $country
slef:: mycountry()
在子類訪問父類靜態成員屬性或方法,使用 parent::(注意不是 $parent),**如下:
複製** **如下:
parent:: $country
parent:: mycountry()
外部訪問靜態成員屬性和方法為 類名/子類名::,**如下:
複製** **如下:
person::$country
person::mycountry()
student::$country
但靜態方法也可以通過普通物件的方式訪問.
例子,宣告靜態變數,**如下:
複製** **如下:
<?php
function foo()
?>
例子,使用靜態變數的例子,**如下:
複製** **如下:
<?php
function test()
?>
現在,每次呼叫 test() 函式都會輸出 $w3sky 的值並加一.
靜態www.cppcns.com變數也提供了一種處理遞迴函式的方法,遞迴函式是一種呼叫自己的函式,寫遞迴函式時要小心,因為可能會無窮遞迴下去,必須確保有充分的方法來中止遞迴,一下這個簡單的函式遞迴計數到 10,使用靜態變數 $count 來判斷何時停止.
例子,靜態變數與遞迴函式,**如下:
複製** **如下:
<?php
function test()
$count--;
} ?>
注:靜態變數可以按照上面的例子宣告,如果在宣告中用表示式的結果對其賦值會導致解析錯誤.
本文標題: php中靜態類與靜態變數用法的區別分析
本文位址:
PHP類的靜態方法和靜態變數
在php中,訪問類的方法 變數有兩種方法 1.建立物件 object new class 然後使用 呼叫 object attribute function,前提是該變數 方法可訪問。2.直接呼叫類方法 變數 class attribute function,無論是靜態 非靜態都可以。但是有前提條件...
php靜態變數
在函式執行完後,變數值仍然儲存,並沒有變回初始設定的值0。function test test test test 結果 1 23可以發現a設定靜態變數之後,每次 a的值都儲存下來了。我剛開始還以為這個變數變成了全域性變數,測試發現這個變數 a依然只能在函式裡呼叫,在函式外是不能呼叫的。我們再來看看...
java 靜態變數 與 非靜態變數
一 建立乙個類的物件時 new 類名 時,該類的.class檔案會被載入到一段記憶體中。1.先將該類的.class檔案會被載入到一段記憶體,初始化static屬性和方法,為他們分配空間,以後一直在記憶體中,即使這個物件被銷毀。這就是不建議使用static屬性和方法的原因之一 2.copy其中非sta...