什么是類?
類是定義一系列屬性和操作的模板,而對象則把類實例化,然后交給類來處理
什么是對象?
對象就是數(shù)據(jù),對象本身沒有方法,但是對象有一個"指針",這個指針指向一個類,這個類可以有方法和屬性
什么是方法?
方法描述不不同屬性所導致的不同表現(xiàn)
類和對象的關(guān)系是什么?
類和對象是不可分割的,有對象比定有一個類和其對應,否則這個對象也就成了沒有親人的孩子,(如果由標量進行強制轉(zhuǎn)換的object,沒有一個類和他對應,php有一個stdClass會被這個強制轉(zhuǎn)換的對象所指向)
如何訪問靜態(tài)方法?
php對象訪問類中的靜態(tài)屬性的時候 使用::符號 如果使用::訪問非靜態(tài)屬性的時候會導致E_STRICT級別的錯誤,在php.ini配置報錯等級調(diào)到最高的時候會看到錯誤 提示 error_reportion = E_ALL|E_STRICT
display_errors = On
php多態(tài)是什么?
多態(tài)是指同一類對象在運行時的具體化
php語言是弱類型語言,實現(xiàn)多態(tài)更簡單.更靈活,php自身就是多態(tài),在語言級別上不能說沒有多態(tài)
php中父類和子類看做 繼父和繼子的關(guān)系,他們存在繼承關(guān)系,但不是血緣關(guān)系,因此子類無法向上轉(zhuǎn)型為父類,從而失去多態(tài)最典型的特征
繼承的缺點是什么?
繼承破壞封裝性
繼承是緊耦合的
繼承擴展復雜
順便說說繼承的特點
子類可以訪問父類的公開和保護屬性,反之,訪問私有則不可以。
子類最多只能繼承一個父類,而父類可以有多個子類。
子類不會繼承父類的析構(gòu)函數(shù);
如果要在子類里面使用父類的方法,可以用父類名::父類方法來表示或者用parent::父類方法來表示
方法和屬性在一定程度上為了理解可以是看做等效的。
面向接口編程(接口為抽象而生),(大多數(shù)設(shè)計模式是圍繞著接口展開的)
如果一個類聲明了實現(xiàn) 的接口 如果你實現(xiàn)某個接口中的某一個方法,那么必須實現(xiàn)其他用不到的方法,就會造成代碼冗余
接口可以多繼承
接口是一種規(guī)范和契約,作為規(guī)范 接口應該保證可使用性,作為契約,接口應該保證可控性
接口只是一個聲明,一旦使用interface關(guān)鍵字,就應該實現(xiàn)它. 可以由外部實現(xiàn)(程序猿實現(xiàn)),也可以由內(nèi)部實現(xiàn)(內(nèi)部接口),接口本身什么都不做,但是他可以告訴我們他可以做什么
php接口缺點
沒有契約限制
缺少足夠多的內(nèi)部接口(不明白)
反射
反射是指在php運行狀態(tài)中,擴展分析PHP程序,導出或者提取出關(guān)于類 方法 屬性 參數(shù)等的詳情信息 ,包括注釋.這種動態(tài)獲取信息以及動態(tài)調(diào)用對象的功能稱作為反射API
反射可以獲取類的名字 類的屬性和成員 類的訪問權(quán)限
在MVC和插件開發(fā)中,反射的使用非常常見,反射的消比較大.
反射會破壞封裝的性.可以暴露出方法或者屬性