php中靜態(tài)類(lèi)與靜態(tài)變量用法的區(qū)別分析
來(lái)源:易賢網(wǎng) 閱讀:634 次 日期:2015-01-27 14:10:52
溫馨提示:易賢網(wǎng)小編為您整理了“php中靜態(tài)類(lèi)與靜態(tài)變量用法的區(qū)別分析”,方便廣大網(wǎng)友查閱!

static是定義一個(gè)靜態(tài)對(duì)象或靜態(tài)變量,關(guān)于static 定義的變量或類(lèi)方法有什么特性我們看完本文章的相關(guān)實(shí)例后就見(jiàn)分曉了.

1. 創(chuàng)建對(duì)象$object = new Class(),然后使用”->”調(diào)用:$object->attribute/function,前提是該變量/方法可訪問(wèn).

2. 直接調(diào)用類(lèi)方法/變量: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:聲明類(lèi)成員或方法為 static,就可以不實(shí)例化類(lèi)而直接訪問(wèn),不能通過(guò)一個(gè)對(duì)象來(lái)訪問(wèn)其中的靜態(tài)成員(靜態(tài)方法除外),靜態(tài)成員屬于類(lèi),不屬于任何對(duì)象實(shí)例,但類(lèi)的對(duì)象實(shí)例都能共享.

例子,代碼如下:

代碼如下:

<?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();

// 子類(lèi)中輸出成員屬性值

echo Student::$country."<br />"; // 輸出:中國(guó)

$t1 = new Student();

$t1->study(); // 輸出:我是中國(guó)人

?>

運(yùn)行該例子,輸出:

中國(guó)

我是中國(guó)人

我是中國(guó)人

中國(guó)

我是中國(guó)人

小結(jié):在類(lèi)內(nèi)部訪問(wèn)靜態(tài)成員屬性或者方法,使用 self::(注意不是 $slef),代碼如下:

代碼如下:

slef:: $country

slef:: myCountry()

在子類(lèi)訪問(wèn)父類(lèi)靜態(tài)成員屬性或方法,使用 parent::(注意不是 $parent),代碼如下:

代碼如下:

parent:: $country

parent:: myCountry()

外部訪問(wèn)靜態(tài)成員屬性和方法為 類(lèi)名/子類(lèi)名::,代碼如下:

代碼如下:

Person::$country

Person::myCountry()

Student::$country

但靜態(tài)方法也可以通過(guò)普通對(duì)象的方式訪問(wèn).

例子,聲明靜態(tài)變量,代碼如下:

代碼如下:

<?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)變量的例子,代碼如下:

代碼如下:

<?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ù),代碼如下:

代碼如下:

<?PHP

function Test()

{

static $count = 0;

$count++;

echo $count;

if ($count < 10) {

Test();

}

$count--;

}

?>

更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類(lèi)型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專(zhuān)用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)