靜態(tài)類與靜態(tài)變量如何在php中使用?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
我們擁有10年網(wǎng)頁(yè)設(shè)計(jì)和網(wǎng)站建設(shè)經(jīng)驗(yàn),從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁(yè)設(shè)計(jì)師為您提供的解決方案。為企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序定制開(kāi)發(fā)、成都做手機(jī)網(wǎng)站、H5技術(shù)、等業(yè)務(wù)。無(wú)論您有什么樣的網(wǎng)站設(shè)計(jì)或者設(shè)計(jì)方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計(jì)服務(wù)并滿足您的需求。static是定義一個(gè)靜態(tài)對(duì)象或靜態(tài)變量,關(guān)于static 定義的變量或類方法有什么特性我們看完本文章的相關(guān)實(shí)例后就見(jiàn)分曉了.
1. 創(chuàng)建對(duì)象$object = new Class(),然后使用”->”調(diào)用:$object->attribute/function,前提是該變量/方法可訪問(wèn).
2. 直接調(diào)用類方法/變量:class::attribute/function,無(wú)論是靜態(tài)/非靜態(tài)都可以,但是有前提條件.
A. 如果是變量,需要該變量可訪問(wèn).
B. 如果是方法,除了該方法可訪問(wèn)外,還需要滿足.
① 如果是靜態(tài)方法,沒(méi)有特殊條件.
② 如果是非靜態(tài)方法,需要改方法中沒(méi)有使用$this,即沒(méi)有調(diào)用非靜態(tài)的變量/方法,當(dāng)然,調(diào)用靜態(tài)的變量/方法沒(méi)有問(wèn)題.
然后我們?cè)倏匆幌率褂?object->… 和使用class::… 都有什么區(qū)別:
1. 使用$object->… ,需要執(zhí)行構(gòu)造函數(shù)創(chuàng)建對(duì)象.
2. 使用class::… 調(diào)用靜態(tài)方法/變量,不需要執(zhí)行構(gòu)造函數(shù)創(chuàng)建對(duì)象.
3. 使用class::… 調(diào)用非靜態(tài)方法/變量,也不需要執(zhí)行構(gòu)造函數(shù)創(chuàng)建對(duì)象.
然后奇怪的地方就出來(lái)了,既然2和3都一樣,那靜態(tài)方法/變量存在還有什么意義呢?
靜態(tài)static:聲明類成員或方法為 static,就可以不實(shí)例化類而直接訪問(wèn),不能通過(guò)一個(gè)對(duì)象來(lái)訪問(wèn)其中的靜態(tài)成員(靜態(tài)方法除外),靜態(tài)成員屬于類,不屬于任何對(duì)象實(shí)例,但類的對(duì)象實(shí)例都能共享.
例子,代碼如下:
復(fù)制代碼 代碼如下:
<?php
Class Person{
// 定義靜態(tài)成員屬性
public static $country = "中國(guó)";
// 定義靜態(tài)成員方法
public static function myCountry() {
// 內(nèi)部訪問(wèn)靜態(tài)成員屬性
echo "我是".self::$country."人<br />";
}
}
class Student extends Person {
function study() {
echo "我是". parent::$country."人<br />";
}
}
// 輸出成員屬性值
echo Person::$country."<br />"; // 輸出:中國(guó)
$p1 = new Person();
//echo $p1->country; // 錯(cuò)誤寫(xiě)法
// 訪問(wèn)靜態(tài)成員方法
Person::myCountry(); // 輸出:我是中國(guó)人
// 靜態(tài)方法也可通過(guò)對(duì)象訪問(wèn):
$p1->myCountry();
// 子類中輸出成員屬性值
echo Student::$country."<br />"; // 輸出:中國(guó)
$t1 = new Student();
$t1->study(); // 輸出:我是中國(guó)人
?>
運(yùn)行該例子,輸出:
中國(guó)
我是中國(guó)人
我是中國(guó)人
中國(guó)
我是中國(guó)人
小結(jié):在類內(nèi)部訪問(wèn)靜態(tài)成員屬性或者方法,使用 self::(注意不是 $slef),代碼如下:
復(fù)制代碼 代碼如下:
slef:: $country
slef:: myCountry()
在子類訪問(wèn)父類靜態(tài)成員屬性或方法,使用 parent::(注意不是 $parent),代碼如下:
復(fù)制代碼 代碼如下:
parent:: $country
parent:: myCountry()
外部訪問(wèn)靜態(tài)成員屬性和方法為 類名/子類名::,代碼如下:
復(fù)制代碼 代碼如下:
Person::$country
Person::myCountry()
Student::$country
但靜態(tài)方法也可以通過(guò)普通對(duì)象的方式訪問(wèn).
例子,聲明靜態(tài)變量,代碼如下:
復(fù)制代碼 代碼如下:
<?PHP
function foo(){
static $int = 0;// correct
static $int = 1+2; // wrong (as it is an expression)
static $int = sqrt(121); // wrong (as it is an expression too)
$int++;
echo $int;
}
?>
例子,使用靜態(tài)變量的例子,代碼如下:
復(fù)制代碼 代碼如下:
<?PHP
function Test()
{
static $w3sky = 0;
echo $w3sky;
$w3sky++;
}
?>
現(xiàn)在,每次調(diào)用 Test() 函數(shù)都會(huì)輸出 $w3sky 的值并加一.
靜態(tài)變量也提供了一種處理遞歸函數(shù)的方法,遞歸函數(shù)是一種調(diào)用自己的函數(shù),寫(xiě)遞歸函數(shù)時(shí)要小心,因?yàn)榭赡軙?huì)無(wú)窮遞歸下去,必須確保有充分的方法來(lái)中止遞歸,一下這個(gè)簡(jiǎn)單的函數(shù)遞歸計(jì)數(shù)到 10,使用靜態(tài)變量 $count 來(lái)判斷何時(shí)停止.
例子,靜態(tài)變量與遞歸函數(shù),代碼如下:
復(fù)制代碼 代碼如下:
<?PHP
function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test();
}
$count--;
}
?>
注:靜態(tài)變量可以按照上面的例子聲明,如果在聲明中用表達(dá)式的結(jié)果對(duì)其賦值會(huì)導(dǎo)致解析錯(cuò)誤.
關(guān)于靜態(tài)類與靜態(tài)變量如何在php中使用問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
新聞名稱:靜態(tài)類與靜態(tài)變量如何在php中使用-創(chuàng)新互聯(lián)
文章路徑:http://bm7419.com/article4/dpdeoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、App開(kāi)發(fā)、網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)公司、標(biāo)簽優(yōu)化、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容