html - PHP類別為什麼要實例化?
我想大声告诉你
我想大声告诉你 2017-05-24 11:34:11
0
8
735

今天學習到了MVC結構,發現程式碼中呼叫類別裡面的方法時都要先實例化類,最後在呼叫類別的方法

例如:

$xxxxx = new xxxxx();
$xxxxx->ccc('hello wolrd');

可是不是可以直接像下面這樣呼叫嗎?

xxxxx::ccc('hello wolrd');

為什麼一定要實例化?實例化能帶給我們什麼?與直接呼叫相比有什麼好處?求大神解惑

我想大声告诉你
我想大声告诉你

全部回覆(8)
迷茫

->,插入式解引用操作符(infix dereference operator),将对象的引用指向对象,例如对象->对象的方法。
::,作用域解析操作符(Scope Resolution operator),用于调用类的静态成员变量或是类之间的调用。
详见博文。
也是说 $xxxxx->ccc('hello wolrd'); 为调动类中的普通方法,要先实例化类的实例。
xxxxx::ccc('hello wolrd') 為呼叫類別中的靜態方法,不需要實例化類別可直接呼叫。


實例化類別之後能存取類別的方法與屬性。
而靜態方法能獨立完成一個無狀態的操作。
靜態方法和實例化方法的更多相關。

给我你的怀抱

OOP程式設計思想,舉個例子來說

$person=new Person();
$person.username="godtoy";

这种方式,每一个都是一个实例

使用static的優點在於如果是工具類別就比較方便

Utils::max(val1,val2);
为情所困

很可愛的樓主 提出的問題也很可愛 話說這種問題為什麼要去踩呢....

很顯然就是,下面那種方法也是可以呼叫的,兩種都可以,只不過差別在於,下面一種只有類別的靜態成員函數可以這樣呼叫
至於為什麼要實例化,估計是題主根本不懂得什麼是類別?
我實在也不是謙虛,不能說出太多富有哲理詳盡的解釋,只能說

類別是物件的抽象,物件是類別的實例,就好比人類是對所有人的抽象,例如人作死就會死,這是人(類別)的屬性,現在出生了一個小孩(實例化) ,那麼作死就會死,對這個小孩(對象)的有效

之所以我們要去抽象的總結出人類的特徵,就是要讓我們能更好的學習如何去,比如你是一個醫生,就能更好的去醫治每一個個體(關鍵還是實例化後的對象),當然每個個體都還不太一樣,自己可以再去看看文件等更詳細的解答

我想大声告诉你

主要為了面向對象,可以透過一些參數實例化一個對象,你這是靜態調用,不存在對象

小葫芦

  
實例化好比一台電視裡面有很多節目,此時你想看電視,你想看電視得打開電視,那麼你得打開電視上的開關按鈕,那就得需要new這個關鍵字去實例化這個對象,好讓我們能看到電視節目能操作電視機裡面的功能。

與直接呼叫相比,實例化呼叫可以在類別裡面的方法提供存取權限存取修飾符:

  • public (公共的、預設)

  • protected (受保護的)

  • private (私有的)

而直接呼叫就不需要實例換,使用起來方便而已。

小葫芦

假設你定義了一個Car类,那么这个类是一个图纸,你不能拿一个图纸出去卖吧,所以你需要new生產出一輛車,才能賣,才能開。因為你可以參考這張圖紙,生產很多車啊。

當然這個Car可能会有一些静态方法或者属性,这是你不需要生产汽车就可以使用的,比如你要看图纸,那就是Car的静态方法show

滿天的星座

如果使用靜態方法就不存在建構子這一說法了。

迷茫

你需要 單例模式

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!