一個靜態(tài)類相當于"把功能類似的幾個過程函數(shù) 集中在一個類名稱下"。
創(chuàng)新互聯(lián)成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都做網(wǎng)站、成都網(wǎng)站設計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元和田縣做網(wǎng)站,已為上家服務,為和田縣各地企業(yè)和個人服務,聯(lián)系電話:18980820575
在OOP純面相對象編程中,為了兼容POP面相過程的舊代碼,而設有了靜態(tài)類。
比如,你把原來寫的功能相關的function都可以直接歸在一個靜態(tài)類下。
靜態(tài)類和靜態(tài)方法也主要用于描述與類數(shù)據(jù)無關的子過程。
非靜態(tài)類才是對象編程的常態(tài)。是把大問題,化解成一個個獨立解決的小問題的機制。
首先:類不可以標注static,也就是說沒有“靜態(tài)類“!
所謂"靜態(tài)類"指的是:類中含有靜態(tài)的成員、方法是用static標注的。寫法例如:
?php
class?Math
{
public?static?function?ceil($value)
{
return?ceil($value);
}
public?static?function?floor($value)
{
return?floor($value);
}
}
?
另外類種的靜態(tài)方法無需實例化成對象即可使用哦,實例化會報錯哦;
定義之后 編譯之時 訪問之前
當你定義了這個類,在php程序編譯的時候就加載到內(nèi)存里去了,它以類的形式存在,但卻是面向過程的,類不需要實例化就可以訪問靜態(tài)成員。如果濫用靜態(tài)類會造成超出系統(tǒng)內(nèi)存的錯誤。
1. 創(chuàng)建對象$object = new Class(),然后使用”-”調(diào)用:$object-attribute/function,前提是該變量/方法可訪問。
2. 直接調(diào)用類方法/變量:class::attribute/function,無論是靜態(tài)/非靜態(tài)都可以。但是有前提條件:
A. 如果是變量,需要該變量可訪問。
B. 如果是方法,除了該方法可訪問外,還需要滿足:
b1) 如果是靜態(tài)方法,沒有特殊條件;
b2) 如果是非靜態(tài)方法,需要改方法中沒有使用$this,即沒有調(diào)用非靜態(tài)的變量/方法,當然,調(diào)用靜態(tài)的變量/方法沒有問題。
然后我們再看一下使用$object-… 和使用class::… 都有什么區(qū)別:
1. 使用$object-… ,需要執(zhí)行構(gòu)造函數(shù)創(chuàng)建對象;
2. 使用class::… 調(diào)用靜態(tài)方法/變量,不需要執(zhí)行構(gòu)造函數(shù)創(chuàng)建對象;
3. 使用class::… 調(diào)用非靜態(tài)方法/變量,也不需要執(zhí)行構(gòu)造函數(shù)創(chuàng)建對象。
然后奇怪的地方就出來了,既然2和3都一樣,那靜態(tài)方法/變量存在還有什么意義呢?
靜態(tài) static
聲明類成員或方法為 static ,就可以不實例化類而直接訪問,不能通過一個對象來訪問其中的靜態(tài)成員(靜態(tài)方法除外)。靜態(tài)成員屬于類,不屬于任何對象實例,但類的對象實例都能共享。