31 什么是靜態(tài)變量?
如果一個函數(shù)內(nèi)定義的變量前使用關(guān)鍵字static來聲明,那么該變量就是靜態(tài)變量。 一般函數(shù)內(nèi)的變量在函數(shù)調(diào)用結(jié)束后,其存儲的數(shù)據(jù)將被清除,所占的內(nèi)存空間也被釋放。而使用靜態(tài)變量時, 該變量會在函數(shù)第一次被調(diào)用時被初始化,初始化后該變量也不會被清除,當再次調(diào)用該函數(shù)時,這個靜態(tài)變量 不再被初始化,而能保存上次函數(shù)執(zhí)行完后的值。可以說靜態(tài)變量在所有對該函數(shù)的調(diào)用之間共享。
32 php中函數(shù)傳遞參數(shù)的方式有哪些?兩者有什么區(qū)別?
按值傳遞和按地址傳遞(或按引用傳遞) (1)按值傳遞: 待傳遞的變量,與傳遞給函數(shù)之后的變量是存儲在不同的空間中。所以函數(shù)體內(nèi)對 該變量值做的修改,不影響原本的變量值。 (2)按地址傳遞: 使用 & 符號,表明該參數(shù)是以地址的方式傳遞值。并不會將主程序中的指定數(shù)值或目標變量傳遞給函數(shù),而是把該數(shù)值或變量的內(nèi)存儲存區(qū)塊地址導(dǎo)入函數(shù)之中,所以函數(shù)體內(nèi)的該變量和主程序中的該變量在內(nèi)存 中是同一個。函數(shù)體做的修改,直接影響到函數(shù)體外部的該變量的值。
33 判斷一個函數(shù)是否存在?
function_exists( string $function_name ) 如果存在,返回true, 不存在則返回 false。
34 func()和@func()之間有什么區(qū)別?
第二個函數(shù)調(diào)用失敗不會報錯,第一個會報錯
35 include()和require()函數(shù)的用法和區(qū)別是什么?include_once()和require_once()呢?
include()和require()的區(qū)別 require() :如果文件不存在,會報出一個fatal error.腳本停止執(zhí)行 include() : 如果文件不存在,會給出一個 warning,但腳本會繼續(xù)執(zhí)行 這里特別要注意的是: 使用include()文件不存在時,腳本繼續(xù)執(zhí)行,這種情況只出現(xiàn)在PHP 4.3.5之前,這一點,往往被人忽視。 推薦使用require_once()和include_once(),可以檢測文件是否有重復(fù)包含。
include_once (require_once)語句在腳本執(zhí)行期間包含并運行指定文件。此行為和 include (require)語句類似,區(qū)別是如果該文件中的代碼已經(jīng)被包含了,則不會再次包含,只會包含一次。include_once(require_once)需要查詢一遍已加載的文件列表, 確認是否存在, 然后再加載。
36 字符串運算符“.”與算術(shù)運算符“+”有什么區(qū)別?
當“a”“b”之間使用.時認為是連字符。如果兩者間是+的時候php會認為是一次運算。 1)如果+號兩邊的字符串是數(shù)字組成的,那么會將字符串自動轉(zhuǎn)為整型; 2)如果+號兩邊是純粹的字母,那么會輸出0; 3)如果+號兩邊的字符串是以數(shù)字開頭的,那么會截取字符串開頭的數(shù)字,然后進行運算。
37 什么是三目(或三元)運算符?
根據(jù)一個表達式的結(jié)果在另兩個表達式中選擇一個。 例如: ($a==true) ? 'good':'bad';
38 控制流程語句有哪些?
1:三種程序結(jié)構(gòu) 順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu) 2:分支: if/esle/esleif/ switch/case/default 3: switch 需要注意的: case子句中的常量可以是整型、字符串型常量、 或者常量表達式,不允許是變量。 同一個switch子句中,case的值不能相同,否則只能取到首次出現(xiàn)case中的值。 4: 循環(huán) for while do...while do...while 后面必須加入分號結(jié)尾。 while 和 do...while 的區(qū)別 5:break 和 continue 的區(qū)別。 break可以終止循環(huán)。 continue沒有break強大,只能終止本次循環(huán)而進入到下一次循環(huán)中。
39 數(shù)組的概念是什么?數(shù)組根據(jù)索引分為哪兩種,如何區(qū)分?數(shù)組的賦值方式有哪兩種?
數(shù)組是一個可以存儲一組或一系列數(shù)值的變量(復(fù)合型變量) 索引數(shù)組(索引值為數(shù)字,以0開始)和關(guān)聯(lián)數(shù)組(以字符串作為索引值) 數(shù)組的賦值方式有哪兩種? 數(shù)組的聲明方式主要有兩種。 1.通過array()函數(shù)聲明數(shù)組; 可以通過key=>value的方式分別定義索引和值,也可以不定義數(shù)組的索引下標,只給出數(shù)組的元素值。 2.直接為數(shù)組元素賦值,不需要調(diào)用array()函數(shù)。例如: $arr[0] = 1; $arr[1] = 2; 特別注意: 數(shù)組的下標如果是等價于整數(shù)的字符串值(但不能以0開頭),則會被當作整數(shù)對待。 例如: $array[3] 與 $array['3'] 引用的是相同的一個元素,而 $array['03'] 引用的則就是另外的一個元素了。
40 數(shù)組如何遍歷?
①for循環(huán)
②foreach循環(huán) ,這是最常用的遍歷方式。用法如下:foreach($arr as $key=>$value){}
③list each 和while 配合起來循環(huán)
41 foreach數(shù)組的時候指針是如何指向的?list()/each()/while()循環(huán)數(shù)組的時候指針如何指向的呢?
當foreach開始執(zhí)行的時候,數(shù)組內(nèi)部的指針會自動指向第一個單元,因為foreach所操作的是指定數(shù)組的拷貝,而不是數(shù)組本身。
而each()一個數(shù)組后,數(shù)組指針將停留在數(shù)組中的下一個單元或者碰到數(shù)組結(jié)尾時停留在最后一個單元,如果再次使用each()遍歷數(shù)組,必須使用reset()。
reset()將數(shù)組的內(nèi)部指針倒回到第一個單元并返回第一個數(shù)組單元的值。
42 如何計算數(shù)組長度(或者說計算數(shù)組中所有元素的個數(shù))?字符串怎么取長度?
count() -- 計算數(shù)組中的元素個數(shù)。
可以使用count(數(shù)組名)或者count(數(shù)組名,1),如果有第二個參數(shù),并且是數(shù)字1,則表示遞歸統(tǒng)計數(shù)組元素的個數(shù)。
如果第二個參數(shù)是數(shù)字0,則等同于只有一個參數(shù)的count()函數(shù)。
sizeof() -- count() 的別名
字符串:strlen()、mb_strlen();
43 數(shù)組中相關(guān)的常用函數(shù)有哪些?
1) count --(sizeof別名)— 計算數(shù)組中的單元數(shù)目或?qū)ο笾械膶傩詡€數(shù)
例如:int count ( mixed $var [, int $mode ] ) $var 通常都是數(shù)組類型,任何其它類型都只有一個單元。 $mode 默認值為0. 1為開啟遞歸地對數(shù)組計數(shù)
2) in_array ( mixed $needle , array $haystack [, bool $strict ] ) — 檢查數(shù)組中是否存在某個值。
如果 needle 是字符串,則比較是區(qū)分大小寫的。
如果第三個參數(shù) strict 的值為 TRUE 則 in_array() 函數(shù)還會檢查 needle 的類型是否和 haystack 中的相同。
3) array_merge(array $array1 [, array $array2 [, array $... ]] ) 將一個或多個數(shù)組的單元合并起來,一個數(shù)組中的值附加在前一個數(shù)組的后面。返回作為結(jié)果的數(shù)組。
特別注意:如果輸入的數(shù)組中有相同的字符串鍵名,則該鍵名后面的值將覆蓋前一個值。然而,如果數(shù)組包含數(shù)字鍵名,后面的值將不會覆蓋原來的值,而是附加到后面。
如果只給了一個數(shù)組并且該數(shù)組是數(shù)字索引的,則鍵名會以連續(xù)方式重新索引
4) 數(shù)組與字符串之間的轉(zhuǎn)換
(1)explode ( string $separator , string $string [, int $limit ] ) 使用一個分隔字符來分隔一個字符串。
(2)implode ( string $glue , array $arr ) 使用一個連接符將數(shù)組中的每個單元連接為一個字符串。
join 為 implode 的別名
5) sort(array &$array [, int $sort_flags ]) — 對數(shù)組按照值排序,當本函數(shù)結(jié)束時數(shù)組單元將被從最低到最高重新安排。
44 數(shù)組合并函數(shù)array_merge()和數(shù)組加法運算$arr + $arr2 的區(qū)別是什么?
array_merge()->使用array_merge(),如果是關(guān)聯(lián)數(shù)組合并,如果數(shù)組的鍵名相同,那么后面的值將覆蓋前者;如果是數(shù)字索引數(shù)組合并,則不覆蓋,而是
后者附加到前者后面。
"+"->使用數(shù)組加法運算,與array_merge()不同,加法運算不管是關(guān)聯(lián)數(shù)組還是數(shù)字索引數(shù)組,都是將相同鍵名的的值舍棄,
也就是只保留首次出現(xiàn)該鍵名的元素,后來的具有相同鍵名的元素都不會被加進來。
45 字符串定義的時候單引號和雙引號有什么區(qū)別?
雙引號里面的字段會經(jīng)過編譯器解釋,然后再當作HTML代碼輸出。
‘ ‘ 單引號里面的不進行解釋,直接輸出。
46 echo(),print(),print_r()的區(qū)別?
(1)echo 是語法,Output one or more strings,沒有返回值;
(2)print 是函數(shù),不能輸出數(shù)組和對象,Output a string,print有返回值;
(3)print_r 是函數(shù),可以輸出數(shù)組。print_r是個比較有意思的函數(shù),可以輸出stirng、int、float、
array、object等,輸出array時會用結(jié)構(gòu)表示,print_r輸出成功時返回true;而且print_r可以通過print_r($str,true)來,使print_r不輸出而返回print_r處理后的值。此外,對于echo和print,基本以使用echo居多,因為其效率比print要高。
47 按照功能分類說說都有哪些字符串處理函數(shù)?這些函數(shù)的作用是什么?
A. 字符串輸出函數(shù)
(1)echo $a,$b,$c......; 是一個語言結(jié)構(gòu),而不是一個真正的函數(shù)。
(2)print($a) 本函數(shù)輸出字符串。若成功則返回 1,失敗返回 0
(3)print_r($a)
(4)var_dump($a); 能輸出類型、長度、值
B. 去除字符串首尾空格的函數(shù): trim ltrim rtrim(別名:chop) 使用第二個參數(shù),還可以去除指定的字符。
C. 轉(zhuǎn)義字符串函數(shù):addslashes()
D. 獲取字符串長度的函數(shù):strlen()
E. 截取字符串長度的的函數(shù):substr()
F. 檢索字符串函數(shù): strstr() , strpos()
G. 替換字符串函數(shù):str_replace()
48 preg_replace()和 str_ireplace()兩個函數(shù)在使用上有什么不同?preg_split()和split()函數(shù)如何使用?
str_replace:這個應(yīng)該作為字符串替換的首選方法,不過有一點需要注意,就是把最希望匹配的元素放在前面。
strtr: strtr在短字符串替換的時候也是挺高效的,不過search數(shù)組的下標長度的差別也對效率產(chǎn)生比較大的影響,還有就是沒事最好不要使用strtr(string, string, string)這種形式(對于非單字節(jié)字符很容易產(chǎn)生亂碼)。
preg_replace:這個不用說,可以使用正則匹配,功能絕對是最強的,不過也是要犧牲一點效率的。
preg_ split() 函數(shù)用于正則表達式分割字符串。
split() 函數(shù)同 preg_split() 類似,用正則表達式將字符串分割到數(shù)組中,返回一個數(shù)組,但推薦使用 preg_split()
49 獲取當前時間戳的函數(shù)主要有哪些?用PHP打印出今天的時間,格式是2010-12-10 22:21:21?
date('Y-m-d H:i:s',time());
50 用PHP打印出前一天的時間格式是2010-12-10 22:21:21?如何把2010-12-25 10:30:25變成unix時間戳?
echo date ("Y-m-d H:i:s" ,strtotime("-1 day"));
$unix_time = strtotime("2009-9-2 10:30:25");//變成unix時間戳
echo date("Y-m-d H:i:s",$unix_time);//格式化為正常時間格式