-
__clone()方法的使用。在clone一個新對象時 希望和clone過來的數(shù)據(jù)不一樣;可以用__clone()這個函數(shù)在下面$this->name = "tbd";在__clone()方法里可以自定義修改克隆的內(nèi)容,去設(shè)置克隆后的對象的初始值。
查看全部 -
當希望生成一個新的真正獨立存儲的對象,但新對象的所有數(shù)據(jù)和源對象中的相同,這時我們使用關(guān)鍵字 clone來解決;
(前提是在類中定義了 __clone()方法);使用新對象調(diào)用屬性時,將自動調(diào)用__clone()方法(此方法可以對新對象的數(shù)據(jù)進行修改即初始化)
這就是:想改變一個對象,但是又不想影響源對象,就使用clone;
查看全部 -
使用&指向同一個堆??臻g,實際上還是一個對象;直接賦值就變成了兩個對象,一個屬性值改變時另外屬性值也會發(fā)生改變,如果用clone進行復(fù)制的話,兩個對象之間操作不受任何干擾,相互完全獨立。
查看全部 -
講師語錄:想對一個對象進行操作,但又不想影響源對象的數(shù)據(jù),這時使用clone
查看全部 -
3.__isset()方法:當【不可訪問屬性或未定義的屬性】調(diào)用isset()或empty()時,此方法被調(diào)用
·調(diào)用示例:public function __isset($name){}
4.__unset()方法:當【不可訪問屬性或未定義的屬性】調(diào)用unset()時,此方法被調(diào)用
對不可訪問屬性調(diào)用isset()和empty()時,會觸發(fā)__isset()魔術(shù)方法,注意isset和empty不是相反的關(guān)系,isset判斷的是值是否被定義過,empty認為沒定義過的返回true
查看全部 -
這幾個魔術(shù)方法的核心意義?存在意義?
講師語錄:通過__get()、__set()、__isset()、__unset()等能夠讓我們操作在類中沒有被定義的屬性的名稱;這是這幾個魔術(shù)方法的最大效果(目的/用法);
我們把這種方式成為屬性的重載查看全部 -
在給不可訪問屬性賦值時,__set()會被調(diào)用 定義function __set($name,$value)
讀取不可訪問屬性的值時,__get()會被調(diào)用 定義function __get($name)
當對不可訪問屬性調(diào)用isset()或empty()時,__isset()會被調(diào)用
當對不可訪問的屬性調(diào)用unset()時,__unset()會被調(diào)用
所謂不可訪問屬性,實際上就是在調(diào)用某個屬性時發(fā)現(xiàn)這個屬性沒有被定義(不可訪問屬性,也包括雖然定義了沒有訪問權(quán)限),這時候不同的操作會觸發(fā)不同的魔術(shù)方法
這幾個方法也被成為屬性重載的魔術(shù)方法
屬性重載只能在對象中進行。在靜態(tài)方法中,這些魔術(shù)方法將不會被調(diào)用。所以這些方法都不能被 聲明為 static。從 PHP 5.3.0 起, 將這些魔術(shù)方法定義為 static 會產(chǎn)生一個警告。?
查看全部 -
在給不可訪問屬性賦值時,__set()會被調(diào)用 定義function __set($name,$value)
讀取不可訪問屬性的值時,__get()會被調(diào)用 定義function __get($name)
所謂不可訪問屬性,實際上就是在調(diào)用某個屬性時發(fā)現(xiàn)這個屬性沒有被定義(不可訪問屬性,也包括雖然定義了但沒有訪問權(quán)限),這時候不同的操作會觸發(fā)不同的魔術(shù)方法
格式:
__get()方法:這個方法用來獲取私有成員屬性值的,有一個參數(shù),參數(shù)傳入你要獲取的成員屬性的名稱,返回獲取的屬性值,這個方法不用我們手工的去調(diào)用,因為我們也可以把這個方法做成私有的方法,是在直接獲取私有屬性的時候?qū)ο笞詣诱{(diào)用的。
__set()方法:這個方法用來為私有成員屬性設(shè)置值的,有兩個參數(shù),第一個參數(shù)為你要為設(shè)置值的屬性名,第二個參數(shù)是要給屬性設(shè)置的值,沒有返回值。
案例:
//定義一個類
class Fruit{
//定義類的私有屬性
? ?private $color;
//__set()方法用來設(shè)置私有屬性?
? ?public function __set($name,$value){?
? ? ? ?$this->$name = $value;?
? ?}?
//__get()方法用來獲取私有屬性?
? ?public function __get($name){?
? ? ? ?return $this->$name;?
? ?}?
}
//以上類Fruit中有兩個私有的成員屬性,設(shè)置了__set和__get以后,可以直接通過下面這種方式對成員變量進行調(diào)用。
$fruit = new Fruit();
//調(diào)用沒有訪問權(quán)限的屬性并給其設(shè)置值
$fruit->color = 'red';
echo $fruit->color;
//調(diào)用沒有被定義的屬性并給其設(shè)置值
$fruit->weight = '80kg';
echo $fruit->weight;
如果沒有__set和__get,直接通過$fruit->color這種方式調(diào)用,則會出錯。
注意:將__get()和__set()方法設(shè)置為private私有的訪問權(quán)限,并不影響其被自動調(diào)用;只要對象調(diào)用了未定義的或者沒有訪問權(quán)限的屬性,就會觸發(fā)這兩個方法
這幾個方法也被成為屬性重載的魔術(shù)方法
屬性重載只能在對象中進行。在靜態(tài)方法中,這些魔術(shù)方法將不會被調(diào)用。所以這些方法都不能被 聲明為 static。從 PHP 5.3.0 起, 將這些魔術(shù)方法定義為 static 會產(chǎn)生一個警告。
詳情:https://blog.csdn.net/wanghongios/article/details/49357891
查看全部 -
通過這兩個方法,設(shè)置的屬性,相當于是個動態(tài)屬性;即這個屬性在類里面壓根就不存在;
因為這兩個魔術(shù)方法是在對象調(diào)用某個屬性時發(fā)現(xiàn)這個屬性沒有被定義(不可訪問屬性,也包括雖然定義了但沒有訪問權(quán)限),這時候這兩個方法就會被觸發(fā)查看全部 -
這些方法不是默認存在的,而是我們手工添加到類里面去的,像構(gòu)造方法(__construct())一樣,?類里面添加了才會存在
查看全部 -
正常情況下在PHP中,是不允許存在多個同名方法的;
但是,通過__call()和__callStatic(),就能達到類似的效果?
查看全部 -
1.魔術(shù)方法 ?__call():當對象訪問不存在的方法名稱時,此方法會被自動調(diào)用。
①調(diào)用示例:public function __call($name,$argument){}
②注意:訪問控制關(guān)鍵字必須為public;必須有兩個參數(shù):對象訪問的方法名稱($name)、方法包含的參數(shù)($argument,數(shù)組);
2.魔術(shù)方法 ?__callStatic():當對象訪問不存在的靜態(tài)方法名稱時,此方法會被自動調(diào)用。
①調(diào)用示例:public static function __callStatic($name,$argument){} ?此方法為靜態(tài)方法(static)
②注意:訪問控制關(guān)鍵字必須為public;必須有兩個參數(shù):對象訪問的方法名稱($name)、方法包含的參數(shù)($argument,數(shù)組);
3.這兩種方法也被稱為方法的重載。通過這兩個方法,對同一個方法($name)的調(diào)用可以對應(yīng)不同的方法的實現(xiàn)(即同一個方法的靜態(tài)調(diào)用、動態(tài)調(diào)用對應(yīng)不同的方法實現(xiàn))
重寫/覆蓋 ?override ?
指:子類重寫了父類的同名方法 ?
重載: overload ?
重載是指:存在多個同名方法,但參數(shù)類型/個數(shù)不同. ?
傳不同的參數(shù),調(diào)用不同的方法 ?
但是在PHP中,不允許存在多個同名方法. ?
因此,不能夠完成java,c++中的這種重載 ?
但是,PHP的靈活,能達到類似的效果,例如通過__call()和__callStatic()就可以實現(xiàn);
查看全部 -
1.魔術(shù)方法 ?__call():當對象訪問不存在的方法名稱時,此方法會被自動調(diào)用。
①調(diào)用示例:public function __call($name,$argument){}
②注意:訪問控制關(guān)鍵字必須為public;必須有兩個參數(shù):對象訪問的方法名稱($name)、方法包含的參數(shù)($argument,數(shù)組);
2.魔術(shù)方法 ?__callStatic():當對象訪問不存在的靜態(tài)方法名稱時,此方法會被自動調(diào)用。
①調(diào)用示例:public static function __callStatic($name,$argument){} ?此方法為靜態(tài)方法(static)
②注意:訪問控制關(guān)鍵字必須為public;必須有兩個參數(shù):對象訪問的方法名稱($name)、方法包含的參數(shù)($argument,數(shù)組);
3.這兩種方法也被稱為方法的重載。通過這兩個方法,對同一個方法($name)的調(diào)用可以對應(yīng)不同的方法的實現(xiàn)(即同一個方法的靜態(tài)調(diào)用、動態(tài)調(diào)用對應(yīng)不同的方法實現(xiàn))
重寫/覆蓋 ?override ?
指:子類重寫了父類的同名方法 ?
重載: overload ?
重載是指:存在多個同名方法,但參數(shù)類型/個數(shù)不同. ?
傳不同的參數(shù),調(diào)用不同的方法 ?
但是在PHP中,不允許存在多個同名方法. ?
因此,不能夠完成java,c++中的這種重載 ?
但是,PHP的靈活,能達到類似的效果,例如通過__call()和__callStatic()就可以實現(xiàn)
查看全部 -
1.魔術(shù)方法: ?__tostring會在把對象轉(zhuǎn)換為string的時候自動調(diào)用
2.魔術(shù)方法: ?__invoke會在把對象當作方法的時候自動調(diào)用?
(前提是這些魔術(shù)方法都要定義在類里面)
查看全部 -
面向?qū)ο?-魔術(shù)方法
(使用這些魔術(shù)方法的前提是:要把這些魔術(shù)方法定義在類里面,用哪個定義哪個)查看全部
舉報