Eval函數(shù)介紹
Eval函數(shù)的語(yǔ)法如下:
eval ( string $code )
$code是字符串型變量昙衅,是需要執(zhí)行的PHP代碼。
代碼不能包含打開(kāi)/關(guān)閉?PHP tags入问。比如糊治,?'echo "Hi!";'?不能這樣傳入:''醋旦。但仍然可以用合適的PHP tag來(lái)離開(kāi)、重新進(jìn)入PHP模式倔幼。比如?'echo "In PHP mode!"; ?>In HTML mode!
eval()的返回值為?NULL,除非在執(zhí)行的代碼中return了一個(gè)值爽待,函數(shù)返回傳遞給?return?的值损同。?PHP 7?開(kāi)始,執(zhí)行的代碼里如果有一個(gè)parse error鸟款,eval()?會(huì)拋出?ParseError?異常揖庄。在?PHP 7?之前,?如果在執(zhí)行的代碼中有parse error欠雌,eval()?返回?FALSE蹄梢,之后的代碼將正常執(zhí)行。無(wú)法使用?set_error_handler()?捕獲?eval()?中的解析錯(cuò)誤。
preg_replace函數(shù)分析
preg_replace函數(shù)的語(yǔ)法如下:
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
=
new=phpinfo()&pattern=/lammer/e&base=lammer
mixed?說(shuō)明一個(gè)參數(shù)可以接受多種不同的(但不一定是所有的)類(lèi)型禁炒。Int是整形變量而咆。
中括號(hào)的意思是如果前一個(gè)參數(shù)存在,那么中括號(hào)中的參數(shù)可寫(xiě)可不寫(xiě)幕袱。例如:如果存在$subject參數(shù)暴备,則$limit參數(shù)可有可無(wú);如果不存在$limit參數(shù)们豌,則$ count也不能出現(xiàn)涯捻。
pattern:
要搜索的模式⊥可以使一個(gè)字符串或字符串?dāng)?shù)組障癌。
replacement:
用于替換的字符串或字符串?dāng)?shù)組。
當(dāng)使用e?修飾符時(shí)辩尊,這個(gè)函數(shù)會(huì)轉(zhuǎn)義一些字符(即:'涛浙、"、?\?和?NULL)?然后進(jìn)行后向引用替換摄欲。當(dāng)這些完成后請(qǐng)確保后向引用解析完后沒(méi)有單引號(hào)或?雙引號(hào)引起的語(yǔ)法錯(cuò)誤(比如:?'strlen(\'$1\')+strlen("$2")')轿亮。確保符合PHP的?字符串語(yǔ)法,并且符合eval語(yǔ)法胸墙。因?yàn)樵谕瓿商鎿Q后我注,?引擎會(huì)將結(jié)果字符串作為php代碼使用eval方式進(jìn)行評(píng)估并將返回值作為最終參與替換的字符串。
圖5.1 preg_replace代碼執(zhí)行
subject:
要進(jìn)行搜索和替換的字符串或字符串?dāng)?shù)組迟隅。
如果subject是一個(gè)數(shù)組仓手,搜索和替換回在subject?的每一個(gè)元素上進(jìn)行,?并且返回值也會(huì)是一個(gè)數(shù)組。
limit:
每個(gè)模式在每個(gè)subject上進(jìn)行替換的最大次數(shù)玻淑。默認(rèn)是?-1(無(wú)限)嗽冒。
count:
如果指定,將會(huì)被填充為完成的替換次數(shù)补履。