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