-
abstract class 抽象類查看全部
-
面向對象 1,識別對象 2,識別對象的屬性 3,識別對象的行為查看全部
-
調用clone時自動調用__clone()方法 $james = new NbaPlayer(); //$ja0 對應內存地址(假設為 address0 )中存儲的是 james對象的標識符 $james2 = clone $james; //當希望生成一個真正獨立存儲的 NbaPlayer() 對象,但新對象的 所有數據 都和 $james 對象中的 相同時,使用關鍵字 clone 當class NbaPlayer()中定義了 __clone()方法 后,使用clone關鍵字時,系統將調用 用戶定義的__clone()方法 (此時可以對clone 后生成的新對象的屬性進行修改) 想改變一個對象,但是又不想影響源對象,使用clone __clone()方法的使用。__clone()在 clone一個new的變量時 希望和clone過來的初始值不一樣可以用這個函數在下面$this->name = "tbd";去實現克隆后的初始值不一樣的效果。 魔術方法__clone()可以自定義復制后對象的屬性初期值,使被復制的對象的一些屬性不被復制過去。 使用&指向同一個堆棧空間,實際上還是一個對象,直接賦值就變成了兩個對象,但是一個屬性值改變時另外屬性值也會發生改變,如果用clone進行復制的話,兩個對象之間操作不受任何干擾,相互完全獨立。 0.對象復制可以通過 clone 關鍵字來完成 1.當對象復制完成時,如果定義了 __clone() 方法,則復制生成的對象中的 __clone() 方法會被調用,可用于修改屬性的值 1.$jame1= clone $jame; 2.$jame1不想復制$jame的所有內容,可以在$jame內使用魔術變量__clone() 在這里面可以自定義修改克隆的內容 $obj1 = $ojb; 不能實現對象復制,兩個對象變量指向同一對象 $obj1 = clone $obj; 實現對象復制,變成值相同的兩個對象 調用clone時自動調用__clone()方法查看全部
-
3.__isset()方法:當【不可訪問屬性】調用isset()或empty()時,此方法被調用 ·調用示例:public function __isset($name){} 4.__unset()方法:當【不可訪問屬性】調用unset()時,此方法被調用 ·調用示例:public function __unset($name){} 對不可訪問屬性調用isset()和empty()時,會觸發__isset()魔術方法,注意isset和empty不是相反的關系,isset判斷的是值是否被定義過,empty認為沒定義過的返回true http://img1.sycdn.imooc.com//58494123000180e112800720.jpg isset(),empty():__isset(); unset():__unset(); __get方法如果不返回值的話empty()就一直返回true,在empty()調用時會先調用__isset再調用__get,__isset返回false,empty()就與之相反取true而不會調用__get,__isset返回true,就會調用__get,當有返回值時相當于true,所以結果為false,這相當于一個或關系。empty(false|true) = true|false = true,empty(true|true)=false|false=false。查看全部
-
接口里面的方法都是沒有實現的,而類里面的方法都是有實現的。抽象類,允許類里面一部分方法不實現。查看全部
-
在給不可訪問屬性賦值時,__set()會被調用 定義function __set($name,$value) 讀取不可訪問屬性的值時,__get()會被調用 定義function __get($name) 當對不可訪問屬性調用isset()或empty()時,__isset()會被調用 當對不可訪問的屬性調用unset()時,__unset()會被調用 所謂不可訪問屬性,實際上就是在調用某個屬性時發現這個屬性沒有被定義,這時候不同的操作會觸發不同的魔術方法 這幾個方法也被成為屬性重載的魔術方法 屬性重載只能在對象中進行。在靜態方法中,這些魔術方法將不會被調用。所以這些方法都不能被 聲明為 static。從 PHP 5.3.0 起, 將這些魔術方法定義為 static 會產生一個警告。 不可訪問屬性,也包括雖然跟定義了沒有訪問權限 格式: __get()方法:這個方法用來獲取私有成員屬性值的,有一個參數,參數傳入你要獲取的成員屬性的名稱,返回獲取的屬性值,這個方法不用我們手工的去調用,因為我們也可以把這個方法做成私有的方法,是在直接獲取私有屬性的時候對象自動調用的。 __set()方法:這個方法用來為私有成員屬性設置值的,有兩個參數,第一個參數為你要為設置值的屬性名,第二個參數是要給屬性設置的值,沒有返回值。查看全部
-
1.__call()方法:當對象訪問不存在的方法名稱時,此方法自動調用。 ①調用示例:public function __call($name,$argument){} ②注意:訪問控制關鍵字必須為public;必須有兩個參數:對象訪問的方法名稱($name)、方法包含的參數($argument,數組)。 2.__callStatic()方法:當對象訪問不存在的方法名稱時,此方法自動調用。 ①調用示例:public static function __callStatic($name,$argument){}<br> ②注意:同1-②;此方法為靜態方法(static)。 3.這兩種方法也被稱為方法的重載。通過這兩個方法,同一個方法的調用可以對應不同的方法的實現(同一個方法的靜態調用、動態調用對應不同的方法實現) 如果不設置該魔術方法,調查不存在的方法將會報錯 這是overloading覆蓋,不是overwrite重寫 __call()的第二個變量參數是調用'runTest'方法時傳入的參數。以數組的形式組合在其中; http://img1.sycdn.imooc.com//58493a030001330912800720.jpg implode(,$arr)將數組用","分隔開輸出查看全部
-
1.__tostring()方法:對象被當作string(字符串)使用時(如echo $obj),此方法自動調用,此方法中須返回(return)一個字符串 2.__invoke()方法:對象被當作方法調用時(如$obj()),此方法自動調用 http://img1.sycdn.imooc.com//58ac50c70001656812800720.jpg查看全部
-
_tostring(),當對象被當做String使用時,這個方法會被自動調用,如: echo $obj; __invoke(),當對象被當成方法調用時,這個方法會被自動調用,如:$obj(4);__invoke()方法可以有多個參數,也可以沒有參數,自行定義 __call(),當對象訪問不存在的方法的時候,該方法會自動被調用,定義該方法時,有固定的寫法:public function __call($name, $arguments){},第一個的參數傳遞的是調用的不存在的方法名稱,第二個參數相當于一個數組,保存了調用方法時傳遞的參數. __callStatic(),當對象訪問不存在的靜態方法名稱時,該方法會自動被調用,定義該方法時,有固定的寫法:public static function __callStatic($name,$arguments){}, 可以看出,__call()和__callStatic()方法實現了重載(overload)功能。 __set($name,$value),在給不可訪問的屬性()屬性沒有定義或者是私有數據)賦值時會被調用 __get($name),讀取不可訪問的屬性的值時會被調用 __isset($name),判斷屬性是否存在,當對不可訪問的屬性調用isset($name)(判斷是否存在)或empty($name)(判斷是否不存在)時會被 調用 __unset(),當對不可訪問的屬性調用unset()時會被調用 __clone(),當要復制一個對象給新的對象,并且兩個對象分別指向兩個地址,而不是引用的時候調用該方法。這個方法可以不用自己定義, 是原原本本的復制,也可以自己定義,修改某些屬性值。如:新對象名 = clone 原對象名;查看全部
-
_construct():構造方法;功能:給類的成員屬性賦初值。 __destruct():析構方法; 功能:對象資源釋放。 __tostring():快速獲取字符串信息;功能:當我們調試程序時,需要知道是否得出正確的數據。比如打印一個對象時,看看這個對象都有哪些屬性,其值是什么,如果類定義了toString方法,就能在測試時,echo打印對象體,對象就會自動調用它所屬類定義的toString方法,格式化輸出這個對象所包含的數據。 __invoke():當嘗試以調用函數的方式調用一個對象時,__invoke方法會被自動調用。功能:防止用調用對象為成員方法報錯。 __call():和__get相似帶兩參數。功能:可以在需要的時候調用私有方法和屬性。查看全部
-
1.parent關鍵字 可以可用于 調用父類中 被子類重寫的方法 2.self關鍵字 可以用于訪問 類自身的 成員方法,靜態成員(靜態屬性+靜態方法) 和 類常量;但 不能用于 訪問類自身的 非靜態屬性(非靜態屬性 會根據 不同的對象的賦值 而不同,非靜態方法 不存在這個問題)?。?! self 在 使用常量時 不需要在 常量const名稱 前面添加$符號 3.static::關鍵字用于訪問類自身定義的靜態成員,訪問靜態屬性時 需要在屬性 前面 添加$符號。 4.常量屬性const 不能使用對象訪問,僅能使用類訪問,在類本體內 可以使用“self::常量名”,在類本體外 可以使用“類名::常量名”查看全部
-
1.abstract關鍵字用于定義抽象類 2.在抽象方法前面添加abstract關鍵字可以標明這個方法是抽象方法不需要具體實現{} 3.抽象類中可以包含普通的方法,有方法的具體實現。 4.繼承抽象類的關鍵字是extends 5.抽象類不能被實例化,繼承抽象類的子類需要實現抽象類中定義的抽象方法 6.抽象類比較特殊。但是它和接口一樣。不能直接把對象實例化。通過共性來規范化類。 格式: abstract class classname 7.抽象方法abstract public function A(); http://img1.sycdn.imooc.com//58ac06450001e27512800720.jpg查看全部
-
* 重寫和Final * 1. 子類中編寫跟父類完全一致的方法可以完成對父類方法的重寫 * 2. 對于不想被任何類繼承的類可以在class之前添加final關鍵字 * 3. 對于不想被子類重寫(overwrite, 修改)的方法,可以在方法定義前面添加final關鍵字查看全部
-
::用于訪問類的靜態成員查看全部
-
靜態屬性定義時在訪問控制關鍵字后面添加static。查看全部
舉報
0/150
提交
取消