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