1. 給你一行文字 $string,你會如何編寫一個正規(guī)表達式,把 $string 內(nèi)的 HTML 標(biāo)籤除去?
2. PHP 和 Perl 分辨陣列和散列表的方法有什麼差異?
3. 你如何利用 PHP 解決 HTTP 的無狀態(tài)本質(zhì)?
4. GD 函式庫用來做什麼?
5. 試寫出幾個輸出一段 HTML 代碼的方法。
6. PHP 比 Perl 好嗎?請討論。
以下是 Matt Wilkin 提供的解答:
1. 給你一行文字 $string,你會如何編寫一個正規(guī)表達式,把 $string 內(nèi)的 HTML 標(biāo)籤除去?
首先,PHP 有內(nèi)建函式 strip_tags() 除去 HTML 標(biāo)籤,為何要自行編寫正規(guī)表達式?好了,便當(dāng)作是面試的一道考題吧,我會這樣回答:
$stringOfText = “
This is a test
“;
$expression = “/<(.*?)>(.*?)<\/(.*?)>/”;
echo preg_replace($expression, “\\2″, $stringOfText);
// 有人說也可以使用 /(<[^>]*>)/
$expression = “/(<[^>]*>)/”;
echo preg_replace($expression, “”, $stringOfText);
2. PHP 和 Perl 分辨陣列和散列表的方法有什麼差異?
這正是為何我老是告訴別人選擇適當(dāng)?shù)木幊陶Z言,若果你只用一種語言的話你怎麼能回答這道問題?這道問題很簡單,Perl 所有陣列變量都是以 @ 開頭,例如 @myArray,PHP 則沿用 $ 作為所有變量的開頭,例如 $myArray。
至於 Perl 表示散列表則用 %,例如 %myHash,PHP 則沒有分別,仍是使用 $,例如 $myHash。
3. 你如何利用 PHP 解決 HTTP 的無狀態(tài)本質(zhì)?
最主要的倆各選擇是 session 和 cookie。使用 session 的方法是在每一頁的開始加上 session_start(),然後利用 $_SESSION 散列表來儲存 session 變量。至於 cookie 你只需記著一個原則:在輸出任何文字之前調(diào)用 set_cookie() 函式,此外只需使用 $_COOKIE 散列表便可以存取所有 cookie 變量。
還有一個不那麼可靠的方法,就是利用訪客的 IP 地址,這個方法有特定的危險性。
4. GD 函式庫用來做什麼?
這個可能是我最喜歡的函式庫,自從 PHP 4.3.0 版本後 GD 便內(nèi)建在 PHP 系統(tǒng)中。這個函式庫讓你處理和顯示各式格式的圖檔,它的另一個常見用途是製作所圖檔。GD 以外的另一個選擇是 ImageMagick,但這個函式庫並不內(nèi)建於 PHP 之中,必須由系統(tǒng)管理員安裝在伺服器上。
5. 試寫出幾個輸出一段 HTML 代碼的方法。
嗯,你可以使用 PHP 中任何一種輸出語句,包括 echo、print、printf,大部分人都使用如下例的 echo:
echo “My string $variable”;
你也可以使用這種方法:
echo <<
This text is written to the screen as output and this $variable is parsed too.
If you wanted you can have HTML tags in here as well.
The END; remarks must be on a line of its own, and can’t contain any extra white space.
END;
6. PHP 比 Perl 好嗎?請討論。
我們不要為一個簡單的問題引發(fā)一場舌戰(zhàn),正如我經(jīng)常說的:「為工作選擇適合的語言,不要把工作遷就語言。」我個人認為 Perl 十分適合用作命令行工具,雖然它在網(wǎng)頁應(yīng)用上也有不錯的表現(xiàn),但是它的真正實力在命令行上才能充分發(fā)揮。同樣地,PHP 雖然可以在控制臺的環(huán)境中使用,但是個人認為它在網(wǎng)頁應(yīng)用上有更好的表現(xiàn),PHP 有大量專門為網(wǎng)頁應(yīng)用而設(shè)計的函式,Perl 則似乎以命令行為設(shè)計之本。
個人來說兩種語言我都喜歡,在大學(xué)期間我經(jīng)常使用 Perl、PHP 和 Java,可惜工作上我使用 C#,但在家裡我花不少時間操練 PHP、Perl、Ruby(現(xiàn)正學(xué)習(xí))和 Java,保持我的技能知識在最新狀態(tài)。很多人問我 C 和 C++ 怎麼樣,它們是否仍有機會在我的應(yīng)用中佔一席位,我的答案基本上是「否」,我近來的工作主要集中在網(wǎng)頁開發(fā),雖然 C 和 C++ 也可以用來寫網(wǎng)頁,但它們到底不是為這種工作而設(shè)計的,「為工作選擇適合的語言」,若果我需要編寫一個控制臺應(yīng)用,用來展示 bubble sort、quick sort 和 merge sort 的效能比較,我一定會使用 C / C++。若果我需要編寫一個相片簿系統(tǒng),我會使用 PHP 或者 C#(我認為製作用戶介面方面 .NET 語言比網(wǎng)頁更加)。