51 在url中用get傳值的時(shí)候,若中文出現(xiàn)亂碼,應(yīng)該用哪個(gè)函數(shù)對(duì)中文進(jìn)行編碼?
使用urlencode()對(duì)中文進(jìn)行編碼,使用urldecode()來(lái)解碼。
52 用戶在網(wǎng)站表單提交數(shù)據(jù)的時(shí)候,為了防止腳本攻擊php端接收數(shù)據(jù)的時(shí)候,應(yīng)該如何處理?
使用htmlspecialchars($_POST[‘title’])來(lái)過(guò)濾表單傳參就可以避免腳本攻擊。
53 連接數(shù)據(jù)庫(kù)操作的步驟是什么?每一步的返回值是什么數(shù)據(jù)類型?尤其是mysql_query()返回什么數(shù)據(jù)類型?
$conn=mysql_connect("localhost","sql_name","sql_psw");//打開(kāi)連接
mysql_select_db("數(shù)據(jù)庫(kù)名",$conn);//連接到指定的數(shù)據(jù)庫(kù)
mysql_query("set names utf8");//設(shè)置字符編碼
$sql="";
$R=mysql_query($sql);//執(zhí)行SQL語(yǔ)句返回結(jié)果集
while($v=mysql_fetch_array($R)){
echo "字段名".$v['title'];
}
mysql_query()如果里面放的是查詢之類的語(yǔ)句,那返回的是資源,說(shuō)白了就是你要查的數(shù)據(jù)結(jié)果集;如果里面放的是增刪改之類的語(yǔ)句,那返回的是true或者false了。
54 $_FILES是幾維數(shù)組?第一維和第二維的索引下標(biāo)分別是什么?批量上傳文件的時(shí)候需要注意什么?
二維數(shù)組。第一維是上傳控件的name,二維下標(biāo)分別為name/type/tmp_name/size/error.
批量上傳時(shí),那么二維下標(biāo)就是數(shù)組,而并非是字符串
55 寫(xiě)一個(gè)遞歸函數(shù)完成以下功能:向函數(shù)中傳一個(gè)多維數(shù)組,對(duì)數(shù)組中所有的值做判斷,如果值是’number’則設(shè)置該值為0?
function recursive_array($arr) {
if(is_array($arr)) {
foreach($arr as $key=>$value) {
if(is_array($value)) {
$arr[$key] = recursive_array($value);
} else {
if($value=='number') {
$arr[$key] = '0'; }
}
}
}
return $arr;
}
56 說(shuō)明是接口、抽象類二者有何相同和不同的地方?
1、接口是幫助php實(shí)現(xiàn)功能意義上的多繼承的,用interface來(lái)聲明,其方法沒(méi)有方法體,使用implemens關(guān)鍵詞來(lái)實(shí)現(xiàn)接口。
接口中只能包含抽象方法和類常量,不可以包含成員屬性。
2、抽象類是一種不能被實(shí)例化的類,只能作父類,用abstract class來(lái)定義,抽象類和普通類可以沒(méi)有區(qū)別,類中可以包含成員屬性、類常量、方法。
子類得用extends來(lái)繼承,而且只能是單繼承。
兩者相同點(diǎn)是都不可以被實(shí)例化,都是需要被繼承才可以使用。
兩者的最大區(qū)別是接口可以實(shí)現(xiàn)多繼承,而抽象類只能是單繼承。
接口中不能包含成員屬性,而抽象類中可以有成員屬性。
接口中的抽象方法必須是public或者無(wú)訪問(wèn)修飾詞,接口中的抽象方法不能用abstract來(lái)修飾。
抽象類中的方法可以是普通方法,也可以是抽象方法,如果是抽象方法,一定需要使用abstract來(lái)修飾。
57 $this,self, parent分別代表什么?哪些場(chǎng)合下使用
$this代表的是當(dāng)前對(duì)象
self代表的是當(dāng)前的類
parent代表的是當(dāng)前類的父類
使用場(chǎng)合:
$this只能使用在當(dāng)前類中,通過(guò)$this->可以調(diào)用當(dāng)前類中的屬性和方法;
self只能在當(dāng)前類中使用,通過(guò)作用域操作符::訪問(wèn)當(dāng)前類中的類常量、當(dāng)前類中的靜態(tài)屬性、當(dāng)前類中的方法;
parent只能使用在有父類的當(dāng)前類中,通過(guò)作用域操作符::訪問(wèn)父類中的類常量、父類中的靜態(tài)屬性、父類中的方法。
58 作用域操作符在那些場(chǎng)合下使用?
作用于操作符的使用場(chǎng)合
a) 本類中: i. self::類常量 ii. self::靜態(tài)屬性 iii. self::方法() parent::方法()
b) 子類中: i. parent::類常量 ii. parent::靜態(tài)屬性(public或者protected) iii. parent::方法()(public或者protected)
c) 類外: i. 類名::類常量 ii. 類名::靜態(tài)屬性(public) iii. 類名::靜態(tài)方法(public)
59 Class關(guān)鍵詞前可以有哪些修飾詞
- Final修飾,表示該類是最終的,無(wú)法繼承;
- Abstract修飾,表示該類是抽象類
60 訪問(wèn)權(quán)限修飾符有哪幾種,對(duì)比解釋
1)public 表示公共的,在本類中和子類中以及類外,可以對(duì)其調(diào)用;
2)protected表示受保護(hù)的,可以在本類中和子類中調(diào)用;
3)private表示私有的,只能在本類中調(diào)用;
4)var,效果等同于public
61 常用魔術(shù)方法的觸發(fā)時(shí)機(jī)?
1)__autoload() :當(dāng)程序執(zhí)行到實(shí)例化某個(gè)類的時(shí)候,如果在實(shí)例化前沒(méi)有引入這個(gè)類文件,那么就自動(dòng)執(zhí)行__autoload()函數(shù)。這個(gè)函數(shù)會(huì)根據(jù)實(shí)例化的類的名稱來(lái)查找這個(gè)類文件的路徑,當(dāng)判斷這個(gè)類文件路徑下確實(shí)存在這個(gè)類文件后,就執(zhí)行include或者require來(lái)載入該類,然后程序繼續(xù)執(zhí)行,如果這個(gè)路徑下不存在該文件時(shí)就提示錯(cuò)誤。使用自動(dòng)載入的魔術(shù)函數(shù)可以不必要寫(xiě)很多個(gè)include或者require函數(shù)。
2)__construct() :構(gòu)造方法是實(shí)例化對(duì)象的時(shí)候自動(dòng)執(zhí)行的方法,作用就是初始化對(duì)象。該方法可以沒(méi)有參數(shù),也可以有多個(gè)參數(shù)。如果有參數(shù),那么new這個(gè)對(duì)象的時(shí)候要記得寫(xiě)上相應(yīng)的參數(shù)。在php5以前,沒(méi)有魔術(shù)構(gòu)造方法,普通構(gòu)造方法是一個(gè)跟類名同名的方法來(lái)實(shí)現(xiàn)構(gòu)造的。如果一個(gè)類中既寫(xiě)了魔術(shù)構(gòu)造方法,又定義了普通構(gòu)造方法。那么php5以上版本中,魔術(shù)方法起作用,普通構(gòu)造方法不起作用。反之,在php5以前版本中,不認(rèn)識(shí)魔術(shù)構(gòu)造方法,只是把該方法當(dāng)做普通的方法。
3)__destruct() :析構(gòu)方法作用和構(gòu)造方法正好相反,是對(duì)象被銷毀時(shí)被自動(dòng)調(diào)用的,作用是釋放內(nèi)存。析構(gòu)方法沒(méi)有參數(shù)。
4)__call() :當(dāng)程序調(diào)用一個(gè)不存在或不可見(jiàn)的成員方法時(shí),自動(dòng)觸發(fā)執(zhí)行__call()。它有兩個(gè)參數(shù),分別是未訪問(wèn)到的方法名稱和方法的參數(shù)。而第二個(gè)參數(shù)是數(shù)組類型。
5)__get() :當(dāng)程序調(diào)用一個(gè)未定義或不可見(jiàn)的成員屬性時(shí),自動(dòng)觸發(fā)執(zhí)行__get()。它有一個(gè)參數(shù),表示要調(diào)用的屬性的名稱。 6)__set():當(dāng)程序試圖寫(xiě)入一個(gè)不存在或不可見(jiàn)的成員屬性時(shí),PHP就會(huì)自動(dòng)執(zhí)行__set()。它包含兩個(gè)參數(shù),分別表示屬性名稱和屬性值。
7)__tostring() :當(dāng)程序使用echo或print輸出對(duì)象時(shí),會(huì)自動(dòng)調(diào)用該方法。目的是希望通過(guò)該方法將對(duì)象轉(zhuǎn)化為字符串,再輸出。__tostring() 無(wú)參數(shù),但是該方法必須有返回值。
8)__clone() :當(dāng)程序clone一個(gè)對(duì)象的時(shí)候,能觸發(fā)__clone()方法,程序希望通過(guò)這個(gè)魔術(shù)方法實(shí)現(xiàn):不僅僅單純地克隆對(duì)象,還需要克隆出來(lái)的對(duì)象擁有原來(lái)對(duì)象的所有屬性和方法。
62 OOP的三大特性是什么?
- 封裝性:也稱為信息隱藏,就是將一個(gè)類的使用和實(shí)現(xiàn)分開(kāi),只保留部分接口和方法與外部聯(lián)系,或者說(shuō)只公開(kāi)了一些供開(kāi)發(fā)人員使用的方法。于是開(kāi)發(fā)人員只需要關(guān)注這個(gè)類如何使用,而不用去關(guān)心其具體的實(shí)現(xiàn)過(guò)程,這樣就能實(shí)現(xiàn)MVC分工合作,也能有效避免程序間相互依賴,實(shí)現(xiàn)代碼模塊間松藕合。
- 繼承性:就是子類自動(dòng)繼承其父級(jí)類中的屬性和方法,并可以可以添加新的屬性和方法或者對(duì)部分屬性和方法進(jìn)行重寫(xiě)。繼承增加了代碼的可重用性。php只支持單繼承,也就是說(shuō)一個(gè)子類只能有一個(gè)父類。
- 多態(tài)性:子類繼承了來(lái)自父級(jí)類中的屬性和方法,并對(duì)其中部分方法進(jìn)行重寫(xiě)。于是多個(gè)子類中雖然都具有同一個(gè)方法,但是這些子類實(shí)例化的對(duì)象調(diào)用這些相同的方法后卻可以獲得完全不同的結(jié)果,這種技術(shù)就是多態(tài)性。多態(tài)性增強(qiáng)了軟件的靈活性。
63 如果一個(gè)類既要繼承一個(gè)父類,又要實(shí)現(xiàn)多個(gè)接口,該如何寫(xiě)?
書(shū)寫(xiě)格式例如: class MaleHuman extends Human implements Animal,Life { ... }
64 final 關(guān)鍵字的應(yīng)用應(yīng)注意的問(wèn)題?
使用final關(guān)鍵字定義的類,禁止繼承。 使用final關(guān)鍵字定義的方法,禁止重寫(xiě)。
65 如果一個(gè)類是抽象類,而類中的方法都是非抽象的方法,會(huì)報(bào)錯(cuò)嗎?
不會(huì),如果一個(gè)類是抽象類,其中可以沒(méi)有抽象方法,但是一個(gè)類中有個(gè)方法是抽象方法,那么這個(gè)類一定是一個(gè)抽象類
65 說(shuō)說(shuō)static關(guān)鍵字的使用場(chǎng)合?static能用在class前嗎?
static可以在屬性和方法前面使用,調(diào)用static屬性或者方法時(shí),只要將類載入就可用,不用實(shí)例化,static不能用在class的前面。
66 java語(yǔ)言中方法重寫(xiě)和重載分別代表什么意思?準(zhǔn)確說(shuō)php支持方法的重載嗎?很多參考書(shū)中提到的php重載實(shí)際上該如何正確理解?
php不支持方法的重載,很多書(shū)里提到的PHP‘重載’應(yīng)該是‘重寫(xiě)’