今天學(xué)習(xí)到了MVC結(jié)構(gòu),發(fā)現(xiàn)程式碼中呼叫類別裡面的方法時(shí)都要先實(shí)例化類,最後在呼叫類別的方法
例如:
$xxxxx = new xxxxx();
$xxxxx->ccc('hello wolrd');
可是不是可以直接像下面這樣呼叫嗎?
xxxxx::ccc('hello wolrd');
為什麼一定要實(shí)例化?實(shí)例化能帶給我們什麼?與直接呼叫相比有什麼好處?求大神解惑
->
,插入式解引用操作符(infix dereference operator),將對(duì)象的引用指向?qū)ο?,例如?duì)象->對(duì)象的方法。::
,作用域解析操作符(Scope Resolution operator),用于調(diào)用類的靜態(tài)成員變量或是類之間的調(diào)用。
詳見博文。
也是說 $xxxxx->ccc('hello wolrd');
為調(diào)動(dòng)類中的普通方法,要先實(shí)例化類的實(shí)例。xxxxx::ccc('hello wolrd')
為呼叫類別中的靜態(tài)方法,不需要實(shí)例化類別可直接呼叫。
實(shí)例化類別之後能存取類別的方法與屬性。
而靜態(tài)方法能獨(dú)立完成一個(gè)無狀態(tài)的操作。
靜態(tài)方法和實(shí)例化方法的更多相關(guān)。
OOP程式設(shè)計(jì)思想,舉個(gè)例子來說
$person=new Person();
$person.username="godtoy";
這種方式,每一個(gè)都是一個(gè)實(shí)例
使用static的優(yōu)點(diǎn)在於如果是工具類別就比較方便
Utils::max(val1,val2);
很可愛的樓主 提出的問題也很可愛 話說這種問題為什麼要去踩呢....
很顯然就是,下面那種方法也是可以呼叫的,兩種都可以,只不過差別在於,下面一種只有類別的靜態(tài)成員函數(shù)可以這樣呼叫
至於為什麼要實(shí)例化,估計(jì)是題主根本不懂得什麼是類別?
我實(shí)在也不是謙虛,不能說出太多富有哲理詳盡的解釋,只能說
類別是物件的抽象,物件是類別的實(shí)例,就好比人類是對(duì)所有人的抽象,例如人作死就會(huì)死,這是人(類別)的屬性,現(xiàn)在出生了一個(gè)小孩(實(shí)例化) ,那麼作死就會(huì)死,對(duì)這個(gè)小孩(對(duì)象)的有效
之所以我們要去抽象的總結(jié)出人類的特徵,就是要讓我們能更好的學(xué)習(xí)如何去,比如你是一個(gè)醫(yī)生,就能更好的去醫(yī)治每一個(gè)個(gè)體(關(guān)鍵還是實(shí)例化後的對(duì)象),當(dāng)然每個(gè)個(gè)體都還不太一樣,自己可以再去看看文件等更詳細(xì)的解答
主要為了面向?qū)ο螅梢酝高^一些參數(shù)實(shí)例化一個(gè)對(duì)象,你這是靜態(tài)調(diào)用,不存在對(duì)象
實(shí)例化好比一臺(tái)電視裡面有很多節(jié)目,此時(shí)你想看電視,你想看電視得打開電視,那麼你得打開電視上的開關(guān)按鈕,那就得需要new這個(gè)關(guān)鍵字去實(shí)例化這個(gè)對(duì)象,好讓我們能看到電視節(jié)目能操作電視機(jī)裡面的功能。
與直接呼叫相比,實(shí)例化呼叫可以在類別裡面的方法提供存取權(quán)限存取修飾符:
public (公共的、預(yù)設(shè))
protected (受保護(hù)的)
private (私有的)
而直接呼叫就不需要實(shí)例換,使用起來方便而已。
假設(shè)你定義了一個(gè)Car
類,那么這個(gè)類是一個(gè)圖紙,你不能拿一個(gè)圖紙出去賣吧,所以你需要new
生產(chǎn)出一輛車,才能賣,才能開。因?yàn)槟憧梢詤⒖歼@張圖紙,生產(chǎn)很多車啊。
當(dāng)然這個(gè)Car
可能會(huì)有一些靜態(tài)方法或者屬性,這是你不需要生產(chǎn)汽車就可以使用的,比如你要看圖紙,那就是Car
的靜態(tài)方法show
。