java类似php魔术方法_PHP与类有关的几个魔术方法
與類(lèi)有關(guān)的其他魔術(shù)方法
序列化與反序列化技術(shù)
含義:
序列化:
就是將一個(gè)變量所代表的“內(nèi)存”數(shù)據(jù),轉(zhuǎn)換為“字符串”形式并持久保存在硬盤(pán)上的一種做法。
反序列化:
就是將序列化之后保存在硬盤(pán)上的“字符串?dāng)?shù)據(jù)”,恢復(fù)為其原來(lái)的內(nèi)存形式的變量數(shù)據(jù)的一種做法。
序列化的做法:
$v1 = ?123; //這是一個(gè)變量,代表任意的內(nèi)存數(shù)據(jù)
$s1 = ?serialize( $v1 ); //將任何類(lèi)型的變量數(shù)據(jù),轉(zhuǎn)換為“字符串”
file_put_contents( ‘要保存的目標(biāo)文本文件’, $s1); //將該字符串,保存到一個(gè)文件里(就是硬盤(pán)數(shù)據(jù))
反序列化的做法:
$s1 = file_get_contents( ‘保存序列化數(shù)據(jù)的目標(biāo)文本文件’); //從一個(gè)文件里讀出其中的所有字符
$v1 = ?unserialize( $s1 ); //將該字符串?dāng)?shù)據(jù),反序列化轉(zhuǎn)換為變量(數(shù)據(jù))
舉例:
先進(jìn)行基本數(shù)據(jù)的序列化:
再來(lái)對(duì)他們進(jìn)行反序列化:
__sleep():用于對(duì)象的序列化:
1,對(duì)一個(gè)對(duì)象進(jìn)行序列化,只能將其屬性數(shù)據(jù)“保存起來(lái)”,而方法被忽略(方法不是數(shù)據(jù))
2,對(duì)象的序列化的時(shí)候,會(huì)自動(dòng)調(diào)用該對(duì)象所屬類(lèi)的這個(gè)魔術(shù)方法:__sleep()(前提是有該方法)。
且,此時(shí),該方法必須返回一個(gè)數(shù)組,數(shù)組中是“計(jì)劃”要進(jìn)行序列化的屬性名;
舉例:
類(lèi)文件內(nèi)容如下:
__wakeup:用于對(duì)象的反序列化:
1,對(duì)一個(gè)對(duì)象進(jìn)行反序列化,其實(shí)是恢復(fù)其原來(lái)保存起來(lái)的屬性數(shù)據(jù),而且,此時(shí)必然需要依賴(lài)該對(duì)象原本的所屬類(lèi);
2,對(duì)象在反序列化的時(shí)候,會(huì)自動(dòng)調(diào)用該對(duì)象所屬類(lèi)的這個(gè)魔術(shù)方法:__wakeup()
舉例:
下面演示可選屬性的序列化(通過(guò)__sleep):
然后,對(duì)其對(duì)象進(jìn)行序列,并顯示該對(duì)象的數(shù)據(jù):
然后,在另一個(gè)頁(yè)面中,對(duì)其進(jìn)行反序列化:
__tostring()魔術(shù)方法——比較常用!
含義:
將一個(gè)對(duì)象“當(dāng)做”一個(gè)字符串來(lái)使用的時(shí)候,會(huì)自動(dòng)調(diào)用該方法,并且在該方法中,可以返回一定的字符串,以表明該對(duì)象轉(zhuǎn)換為字符串之后的結(jié)果。
注意:
如果沒(méi)有定義該方法,則對(duì)象無(wú)法當(dāng)做字符串來(lái)使用!!!
__invoke()魔術(shù)方法:
將對(duì)象當(dāng)作函數(shù)來(lái)使用的時(shí)候,會(huì)自動(dòng)調(diào)用該方法。通常不推薦這么做。
class ?A{
function ?__invoke(){
echo “
我是一個(gè)對(duì)象呀,你別當(dāng)我是一個(gè)函數(shù)來(lái)隨便調(diào)用!”;
}
}
$obj1 = new A();
$obj1(); //此時(shí)就會(huì)調(diào)用類(lèi)中的方法:__invoke()
總結(jié)
以上是生活随笔為你收集整理的java类似php魔术方法_PHP与类有关的几个魔术方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《GO语言实战》笔记
- 下一篇: php生成图片验证码代码,PHP生成图片