php中靜態(tài)類與靜態(tài)變量用法的區(qū)別分析_PHP教程
推薦:PHP全排列算法實(shí)現(xiàn)程序代碼從n個(gè)不同元素中任取m(mn)個(gè)元素,按照一定的順序排列起來,叫做從n個(gè)不同元素中取出m個(gè)元素的一個(gè)排列。當(dāng)m=n時(shí)所有的排列情況叫全排列。 簡(jiǎn)介 如1,2,3三個(gè)元素的全排列為: 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 共3*2*1=6種 3! 2公式 全排列數(shù)f(n)=n!(定義0!=1) 遞
static是定義一個(gè)靜態(tài)對(duì)象或靜態(tài)變量,關(guān)于static 定義的變量或類方法有什么特性我們看完本文章的相關(guān)實(shí)例后就見分曉了.
1. 創(chuàng)建對(duì)象$object = new Class(),然后使用”->”調(diào)用:$object->attribute/function,前提是該變量/方法可訪問.
2. 直接調(diào)用類方法/變量:class::attribute/function,無論是靜態(tài)/非靜態(tài)都可以,但是有前提條件.
A. 如果是變量,需要該變量可訪問.
B. 如果是方法,除了該方法可訪問外,還需要滿足.
① 如果是靜態(tài)方法,沒有特殊條件.
② 如果是非靜態(tài)方法,需要改方法中沒有使用$this,即沒有調(diào)用非靜態(tài)的變量/方法,當(dāng)然,調(diào)用靜態(tài)的變量/方法沒有問題.
然后我們?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ì)象.
然后奇怪的地方就出來了,既然2和3都一樣,那靜態(tài)方法/變量存在還有什么意義呢?
靜態(tài)static:聲明類成員或方法為 static,就可以不實(shí)例化類而直接訪問,不能通過一個(gè)對(duì)象來訪問其中的靜態(tài)成員(靜態(tài)方法除外),靜態(tài)成員屬于類,不屬于任何對(duì)象實(shí)例,但類的對(duì)象實(shí)例都能共享.
例子,代碼如下:
代碼如下: <?php
Class Person{
// 定義靜態(tài)成員屬性
public static $country = "中國(guó)";
// 定義靜態(tài)成員方法
public static function myCountry() {
// 內(nèi)部訪問靜態(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ò)誤寫法
// 訪問靜態(tài)成員方法
Person::myCountry(); // 輸出:我是中國(guó)人
// 靜態(tài)方法也可通過對(duì)象訪問:
$p1->myCountry();
// 子類中輸出成員屬性值
echo Student::$country."<br />"; // 輸出:中國(guó)
$t1 = new Student();
$t1->study(); // 輸出:我是中國(guó)人
?>
運(yùn)行該例子,輸出:
中國(guó)
我是中國(guó)人
我是中國(guó)人
中國(guó)
我是中國(guó)人
小結(jié):在類內(nèi)部訪問靜態(tài)成員屬性或者方法,使用 self::(注意不是 $slef),代碼如下:
代碼如下: slef:: $country
slef:: myCountry()
在子類訪問父類靜態(tài)成員屬性或方法,使用 parent::(注意不是 $parent),代碼如下:
代碼如下: parent:: $country
parent:: myCountry()
外部訪問靜態(tài)成員屬性和方法為 類名/子類名::,代碼如下:
代碼如下: Person::$country
Person::myCountry()
Student::$country
但靜態(tài)方法也可以通過普通對(duì)象的方式訪問.
例子,聲明靜態(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)變量的例子,代碼如下:
function Test()
{
static $w3sky = 0;
echo $w3sky;
$w3sky++;
}
?>
現(xiàn)在,每次調(diào)用 Test() 函數(shù)都會(huì)輸出 $w3sky 的值并加一.
靜態(tài)變量也提供了一種處理遞歸函數(shù)的方法,遞歸函數(shù)是一種調(diào)用自己的函數(shù),寫遞歸函數(shù)時(shí)要小心,因?yàn)榭赡軙?huì)無窮遞歸下去,必須確保有充分的方法來中止遞歸,一下這個(gè)簡(jiǎn)單的函數(shù)遞歸計(jì)數(shù)到 10,使用靜態(tài)變量 $count 來判斷何時(shí)停止.
例子,靜態(tài)變量與遞歸函數(shù),代碼如下:
代碼如下: <?PHP
function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test();
}
$count--;
}
?>
注:靜態(tài)變量可以按照上面的例子聲明,如果在聲明中用表達(dá)式的結(jié)果對(duì)其賦值會(huì)導(dǎo)致解析錯(cuò)誤.
分享:php頁(yè)面緩存方法小結(jié)在php頁(yè)面緩存主要用到的是ob系列函數(shù),如ob_start(),ob_end_flush(),ob_get_contents(),但是更高級(jí)的緩存是不使用這些函數(shù)的,本文最后會(huì)舉一個(gè)實(shí)例加以說明. 先來看看緩存常用的ob系列函數(shù): ob_start():頁(yè)面緩存開始的標(biāo)志,此函數(shù)一下的內(nèi)容直至ob_end_flush()或者ob
- PHP全排列算法實(shí)現(xiàn)程序代碼
- php頁(yè)面緩存方法小結(jié)
- php查詢mssql出現(xiàn)亂碼的解決方法
- PHP的包含文件函數(shù)require和include路徑總結(jié)
- php獲取QQ頭像并顯示的方法
- php將textarea數(shù)據(jù)提交到mysql出現(xiàn)很多空格的解決方法
- PHP程序員必須清楚的問題匯總
- php驗(yàn)證用戶名是否以字母開頭與驗(yàn)證密碼實(shí)例
- php中正則替換函數(shù)ereg_replace用法實(shí)例
- php中如何制定輕量級(jí)的MVC標(biāo)準(zhǔn)
- PHP圖像操作教程:3D圖、縮放、旋轉(zhuǎn)、裁剪、添加水印
- 解決php mysql查詢插入中文亂碼問題
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- PHP實(shí)例:PHP取GB2312編碼字符串首字母的方法
- Apache中RewriteCond規(guī)則參數(shù)的詳細(xì)介紹
- PHP筆記之:基于面向?qū)ο笤O(shè)計(jì)的詳解
- PHP中addcslashes函數(shù)與stripcslashes的用法
- 菜鳥學(xué)習(xí):動(dòng)態(tài)網(wǎng)頁(yè)P(yáng)HP基礎(chǔ)學(xué)習(xí)筆記
- 簡(jiǎn)捷PHP數(shù)組賦值方法詳解
- 簡(jiǎn)單的php數(shù)據(jù)庫(kù)操作類代碼(增,刪,改,查)
- 基于python發(fā)送郵件的亂碼問題的解決辦法
- php ios推送(代碼)
- 解析CI即CodeIgniter框架在Nginx下的重寫規(guī)則
- 相關(guān)鏈接:
- 教程說明:
PHP教程-php中靜態(tài)類與靜態(tài)變量用法的區(qū)別分析
。