今天學習到了MVC結構,發現程式碼中呼叫類別裡面的方法時都要先實例化類,最後在呼叫類別的方法
例如:
$xxxxx = new xxxxx();
$xxxxx->ccc('hello wolrd');
可是不是可以直接像下面這樣呼叫嗎?
xxxxx::ccc('hello wolrd');
為什麼一定要實例化?實例化能帶給我們什麼?與直接呼叫相比有什麼好處?求大神解惑
迷茫2017-05-24 11:36:11
->
,插入式解引用操作符(infix dereference operator),将对象的引用指向对象,例如对象->对象的方法。::
,作用域解析操作符(Scope Resolution operator),用于调用类的静态成员变量或是类之间的调用。
详见博文。
也是说 $xxxxx->ccc('hello wolrd');
为调动类中的普通方法,要先实例化类的实例。xxxxx::ccc('hello wolrd')
為呼叫類別中的靜態方法,不需要實例化類別可直接呼叫。
實例化類別之後能存取類別的方法與屬性。
而靜態方法能獨立完成一個無狀態的操作。
靜態方法和實例化方法的更多相關。
给我你的怀抱2017-05-24 11:36:11
OOP程式設計思想,舉個例子來說
$person=new Person();
$person.username="godtoy";
这种方式,每一个都是一个实例
使用static的優點在於如果是工具類別就比較方便
Utils::max(val1,val2);
为情所困2017-05-24 11:36:11
很可愛的樓主 提出的問題也很可愛 話說這種問題為什麼要去踩呢....
很顯然就是,下面那種方法也是可以呼叫的,兩種都可以,只不過差別在於,下面一種只有類別的靜態成員函數可以這樣呼叫
至於為什麼要實例化,估計是題主根本不懂得什麼是類別?
我實在也不是謙虛,不能說出太多富有哲理詳盡的解釋,只能說
類別是物件的抽象,物件是類別的實例,就好比人類是對所有人的抽象,例如人作死就會死,這是人(類別)的屬性,現在出生了一個小孩(實例化) ,那麼作死就會死,對這個小孩(對象)的有效
之所以我們要去抽象的總結出人類的特徵,就是要讓我們能更好的學習如何去,比如你是一個醫生,就能更好的去醫治每一個個體(關鍵還是實例化後的對象),當然每個個體都還不太一樣,自己可以再去看看文件等更詳細的解答
高洛峰2017-05-24 11:36:11
實例化好比一台電視裡面有很多節目,此時你想看電視,你想看電視得打開電視,那麼你得打開電視上的開關按鈕,那就得需要new這個關鍵字去實例化這個對象,好讓我們能看到電視節目能操作電視機裡面的功能。
與直接呼叫相比,實例化呼叫可以在類別裡面的方法提供存取權限存取修飾符:
public (公共的、預設)
protected (受保護的)
private (私有的)
而直接呼叫就不需要實例換,使用起來方便而已。
高洛峰2017-05-24 11:36:11
假設你定義了一個Car
类,那么这个类是一个图纸,你不能拿一个图纸出去卖吧,所以你需要new
生產出一輛車,才能賣,才能開。因為你可以參考這張圖紙,生產很多車啊。
當然這個Car
可能会有一些静态方法或者属性,这是你不需要生产汽车就可以使用的,比如你要看图纸,那就是Car
的静态方法show
。