php程序員面試題(附答案)
PHP經典面試題(連載4).
1請說明PHP中傳值與傳引用的區(qū)別。什么時候傳值什么時候傳引用?
答:傳值只是把某一個變量的值傳給了另一個變量,而引用則說明兩者指向了同一個地方。
2在PHP中error_reporting這個函數有什么作用?
答:Theerror_reporting()functionsetstheerror_reportingdirectiveatruntime.PHPhasmanylevelsoferrors,usingthisfunctionsetsthatlevelfortheduration(runtime)ofyourscript.
3請用正則表達式(RegularExpression)寫一個函數驗證電子郵件的格式是否正確。答:}}else{?>
EMAIL檢測functioncheckEmail(sText){
varreg=/^(?:w+.?)*w+@(?:w+.?)*w+$/;
varemail=document.getElementById(sText).value;if(!reg.test(email)){
alert("電子郵件檢測失敗");}else{
alert("電子郵件格式正確");}}
電子郵件:
4簡述如何得到當前執(zhí)行腳本路徑,包括所得到參數。
5有一個一維數組,里面存儲整形數據,請寫一個函數,將他們按從大到小的順序排列。要求執(zhí)行效率高。并說明如何改善執(zhí)行效率。(該函數必須自己實現,不能使用php函數)}
$test=array(1,3,6,8,2,7);BubbleSort($test);var_dump($test);?>
6請舉例說明在你的開發(fā)過程中用什么方法來加快頁面的加載速度
答:要用到服務器資源時才打開,及時關閉服務器資源,數據庫添加索引,頁面可生成靜態(tài),圖片等大文件單獨服務器。使用代碼優(yōu)化工具啦
擴展閱讀:php程序員面試題(b卷 附答案)
1.以下哪一句不會把John新增到users陣列?$users[]="john";
成功把John新增到陣列users。array_add($users,john);函式array_add()無定義。array_push($users,john);
成功把John新增到陣列users。$users||="john";語法錯誤。
2.sort()、assort()、和ksort()有什么分別?它們分別在什么情況下使用?sort()
根據陣列中元素的值,以英文字母順序排序,索引鍵會由0到n-1重新編號。主要是當陣列索引鍵的值無關疼癢時用來把陣列排序。assort()
PHP沒有assort()函式,所以可能是asort()的筆誤。asort()
與sort()一樣把陣列的元素按英文字母順序來排列,不同的是所有索引鍵都獲得保留,特別適合替聯想陣列排序。ksort()
根據陣列中索引鍵的值,以英文字母順序排序,特別適合用于希望把索引鍵排序的聯想陣列。3.以下的代碼會產生什么?為什么?$num=10;
functionmultiply(){$num=$num*10;}
multiply();echo$num;
由于函式multiply()沒有指定$num為全域變量(例如global$num或者$_GLOBALS["num"]),所以$num的值是10。
4.reference跟一個正規(guī)的變量有什么分別?如何passbyreference?在什么情況下我們需要這樣做?
Reference傳送的是變量的地址而非它的值,所以在函式中改變一個變量的值時,整個應用都見到這個變量的新值。
一個正規(guī)變量傳送給函式的是它的值,當函式改變這個變量的值時,只有這個函式才見到新值,應用的其他部分仍然見到舊值。
$myVariable="its"value";
Myfunction(&$myVariable);//以reference傳送參數以reference傳送參數給函式,可以使函式改變了的變量,即使在函式結束后仍然保留新值。5.些函式可以用來在現正執(zhí)行的腳本中插入函式庫?
對這道題目不同的理解會有不同的答案,我的第一個想法是插入PHP函式庫不外乎include()、include_once()、require()、require_once(),但細心再想,“函式庫”也應該包括com物件和.net函式庫,所以我們的答案也要分別包括com_load和dotnet_load,下次有人提起“函式庫”的時候,別忘記這兩個函式。6.foo()與@foo()有什么分別?
foo()會執(zhí)行這個函式,任何解譯錯誤、語法錯誤、執(zhí)行錯誤都會在頁面上顯示出來。@foo()在執(zhí)行這個函式時,會隱藏所有上述的錯誤訊息。
很多應用程式都使用@mysql_connect()和@mysql_query來隱藏mysql的錯誤訊息,我認為這是很嚴重的失誤,因為錯誤不該被隱藏,你必須妥善處理它們,可能的話解決它們。7.你如何替PHP的應用程式偵錯?
我并不常這樣做,我曾經試過很多不同的偵錯工具,在Linux系統(tǒng)中設定這些工具一點也不容易。不過以下我會介紹一個近來頗受注目的偵錯工具。
PHP-AdvancedPHPDebugger或稱PHP-APD,第一步是執(zhí)行以下的指令安裝:pearinstallapd安裝后在你的腳本的開頭位置加入以下的語句開始進行偵錯:apd_set_pprof_trace();執(zhí)行完畢,打開以下檔案來查閱執(zhí)行日志:apd.dumpdir
你也可以使用pprofp來格式化日志。
詳細的資料可以參閱。8.“===”是什么?試舉一個“==”是真但“===”是假的例子!===”是給既可以送回布爾值“假”,也可以送回一個不是布爾值但卻可以賦與“假”值的函式,strpos()和strrpos()便是其中兩個例子。
問題的第二部份有點困難,想一個“==”是假,但是“===”是真的例子卻很容易,相反的例子卻很少。但我終于找到以下的例子:
if(strpos("abc","a")==true){//這部分永不會被執(zhí)行,因為"a"的位置是0,換算成布爾值“假”}if(strpos("abc","a")===true){//這部份會被執(zhí)行,因為“===”保證函式strpos()的送回值不會換算成布爾值.}
9.你會如何定義一個沒有成員函式或特性的類別myclass?classmyclass{}
10.你如何產生一個myclass的物件?$obj=newmyclass();
11.在一個類別內如何存取這個類別的特性及變改它的值?使用語句:$this->propertyName,例如:
classmyclass{private$propertyName;publicfunction__construct(){$this->propertyName="value";}}
12.include和include_once有什么分別?require又如何?
三者都是用來在腳本中插入其他檔案,視乎url_allow_fopen是否核準,這個檔案可以從系統(tǒng)內部或外部取得。但他們之間也有微細的分別:
include():這個函式容許你在腳本中把同一個檔案插入多次,若果檔案不存在,它會發(fā)出系統(tǒng)警告并繼續(xù)執(zhí)行腳本。
include_once():它跟include()的功能相似,正如它的名字所示,在腳本的執(zhí)行期間,有關檔案只會被插入一次。
require():跟include()差不多,它也是用來在腳本中插入其他檔案,但若果檔案不存在,它會發(fā)出系統(tǒng)警告,這個警告會引致致命錯誤令腳本中止執(zhí)行13.以下哪一個函式可以把瀏覽器轉向到另一個頁面?redir()
這不是一個PHP函式,會引致執(zhí)行錯誤。header()
這個是正確答案,header()用來插入卷頭資料,可以用來使瀏覽器轉向到另一個頁面,例如:header("Location:-this.com/");location()
這不是一個PHP函式,會引致執(zhí)行錯誤。redirect()
這不是一個PHP函式,會引致執(zhí)行錯誤。
14.以下哪一個函式可以用來開啟檔案以便讀/寫?fget()
這不是一個PHP函式,會引致執(zhí)行錯誤。file_open()
這不是一個PHP函式,會引致執(zhí)行錯誤。fopen()
這是正確答案,fopen()可以用來開啟檔案以便讀/寫,事實上這個函式還有很多選項,詳細資料請參閱php.net。open_file()
這不是一個PHP函式,會引致執(zhí)行錯誤。
15.mysql_fetch_row()和mysql_fetch_array()有什么分別?
mysql_fetch_row()把數據庫的一列儲存在一個以零為基數的陣列中,第一欄在陣列的索引0,第二欄在索引1,如此類推。mysql_fetch_assoc()把數據庫的一列儲存在一個關聯陣列中,陣列的索引就是欄位名稱,例如我的數據庫查詢送回“first_name”、“l(fā)ast_name”、“email”三個欄位,陣列的索引便是“first_name”、“l(fā)ast_name”和“email”。mysql_fetch_array()可以同時送回mysql_fetch_row()和mysql_fetch_assoc()的值。16.下面的代碼用來做什么?請解釋。$date="08/26/201*";print
ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","[url=file://2///1///3%22,$date]\\\\2/\\\\1/\\\\3",$date[/url]);這是把一個日期從MM/DD/YYYY的格式轉為DD/MM/YYYY格式。我的一個好朋友告訴我可以把這個正規(guī)表達式拆解為以下的語句,對于如此簡單的表示是來說其實無須拆解,純粹為了解說的方便:
//對應一個或更多0-9,后面緊隨一個斜號$regExpression="([0-9]+)/";//應一個或更多0-9,后面緊隨另一個斜號$regExpression.="([0-9]+)/";//再次對應一個或更多0-9$regExpression.="([0-9]+)";至于[url=file://2///1///3]\\\\2/\\\\1/\\\\3[/url]則是用來對應括號,第一個括號對的是月份,第二個括號對應的是日期,第三個括號對應的是年份。
17.給你一行文字$string,你會如何編寫一個正規(guī)表達式,把$string內的HTML標簽除去?首先,PHP有內建函式strip_tags()除去HTML標簽,為何要自行編寫正規(guī)表達式?好了,便當作是面試的一道考題吧,我會這樣回答:
$stringOfText="Thisisatest";$expression="/(.*?)/";echopreg_replace($expression,"[url=file://2/]\\\\2[/url]",$stringOfText);//有人說也可以使用/(]*>)/$expression="/(]*>)/";echopreg_replace($expression,"",$stringOfText);18.PHP和Perl分辨陣列和散列表的方法有什么差異?這正是為何我老是告訴別人選擇適當的編程語言,若果你只用一種語言的話你怎么能回答這道問題?這道問題很簡單,Perl所有陣列變量都是以@開頭,例如@myArray,PHP則沿用$作為所有變量的開頭,例如$myArray。
至于Perl表示散列表則用%,例如%myHash,PHP則沒有分別,仍是使用$,例如$myHash。
19.你如何利用PHP解決HTTP的無狀態(tài)本質?
最主要的倆各選擇是session和cookie。使用session的方法是在每一頁的開始加上session_start(),然后利用$_SESSION散列表來儲存session變量。至于cookie你只需記著一個原則:在輸出任何文字之前調用set_cookie()函式,此外只需使用$_COOKIE散列表便可以存取所有cookie變量。
還有一個不那么可靠的方法,就是利用訪客的IP地址,這個方法有特定的危險性。20.GD函式庫用來做什么?
這個可能是我最喜歡的函式庫,自從PHP4.3.0版本后GD便內建在PHP系統(tǒng)中。這個函式庫讓你處理和顯示各式格式的圖檔,它的另一個常見用途是制作所圖檔。GD以外的另一個選擇是ImageMagick,但這個函式庫并不內建于PHP之中,必須由系統(tǒng)管理員安裝在伺服器上。
21.試寫出幾個輸出一段HTML代碼的方法。
嗯,你可以使用PHP中任何一種輸出語句,包括echo、print、printf,大部分人都使用如下例的echo:
echo"Mystring$variable";你也可以使用這種方法:
echo
友情提示:本文中關于《php程序員面試題(附答案)》給出的范例僅供您參考拓展思維使用,php程序員面試題(附答案):該篇文章建議您自主創(chuàng)作。
來源:網絡整理 免責聲明:本文僅限學習分享,如產生版權問題,請聯系我們及時刪除。