Yahoo! 的 PHP 面試題目(第四部份)
阿恆
若果你已經看過 Yahoo! 的 PHP 面試題目(第一部份)、第二部份及第三部份,請繼續觀看最後一部份第十七至第二十二題。首先會先列出題目,題解會寫在後面。
- 給你一行文字 $string,你會如何編寫一個正規表達式,把 $string 內的 HTML 標籤除去?
- PHP 和 Perl 分辨陣列和散列表的方法有甚麼差異?
- 你如何利用 PHP 解決 HTTP 的無狀態本質?
- GD 函式庫用來做甚麼?
- 試寫出幾個輸出一段 HTML 代碼的方法。
- PHP 比 Perl 好嗎?請討論。
以下是 Matt Wilkin 提供的解答:
- 給你一行文字 $string,你會如何編寫一個正規表達式,把 $string 內的 HTML 標籤除去?
首先,PHP 有內建函式 [strip_tags()][4] 除去 HTML 標籤,為何要自行編寫正規表達式?好了,便當作是面試的一道考題吧,我會這樣回答:
```php
$stringOfText = "This is a test";
$expression = "/<(.*?)>(.*?)<\/(.*?)>/";
echo preg_replace($expression, "\\2", $stringOfText);
// 有人說也可以使用 /(<[^>]*>)/
$expression = "/(<[^>]*>)/";
echo preg_replace($expression, "", $stringOfText);
```
- PHP 和 Perl 分辨陣列和散列表的方法有甚麼差異?
這正是為何我老是告訴別人選擇適當的編程語言,若果你只用一種語言的話你怎麼能回答這道問題?這道問題很簡單,Perl 所有陣列變量都是以 @ 開頭,例如 @myArray,PHP 則沿用 $ 作為所有變量的開頭,例如 $myArray。
至於 Perl 表示散列表則用 %,例如 %myHash,PHP 則沒有分別,仍是使用 $,例如 $myHash。
- 你如何利用 PHP 解決 HTTP 的無狀態本質?
最主要的兩個選擇是 session 和 cookie。使用 session 的方法是在每一頁的開始加上 session\_start(),然後利用 $\_SESSION 散列表來儲存 session 變量。至於 cookie 你只需記著一個原則:在輸出任何文字之前調用 set\_cookie() 函式,此外只需使用 $\_COOKIE 散列表便可以存取所有 cookie 變量。
還有一個不那麼可靠的方法,就是利用訪客的 IP 地址,這個方法有特定的危險性。
- GD 函式庫用來做甚麼?
這個可能是我最喜歡的函式庫,自從 PHP 4.3.0 版本後 GD 便內建在 PHP 系統中。這個函式庫讓你處理和顯示各式格式的圖檔,它的另一個常見用途是製作圖檔。GD 以外的另一個選擇是 [ImageMagick][5],但這個函式庫並不內建於 PHP 之中,必須由系統管理員安裝在伺服器上。
- 試寫出幾個輸出一段 HTML 代碼的方法。
嗯,你可以使用 PHP 中任何一種輸出語句,包括 echo、print、printf,大部分人都使用如下例的 echo:
```php
echo "My string $variable";
```
你也可以使用這種方法:
```php
echo <<<END
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;
```
- PHP 比 Perl 好嗎?請討論。
我們不要為一個簡單的問題引發一場舌戰,正如我經常說的:「為工作選擇適合的語言,不要讓工作遷就語言。」我個人認為 Perl 十分適合用作命令行工具,雖然它在網頁應用上也有不錯的表現,但是它的真正實力在命令行上才能充分發揮。同樣地,PHP 雖然可以在控制台的環境中使用,但是個人認為它在網頁應用上有更好的表現,PHP 有大量專門為網頁應用而設計的函式,Perl 則似乎以命令行為設計之本。
個人來說兩種語言我都喜歡,在大學期間我經常使用 Perl、PHP 和 Java,可惜工作上我使用 C#,但在家裏我花不少時間操練 PHP、Perl、Ruby(現正學習)和 Java,保持我的技能知識在最新狀態。很多人問我 C 和 C++ 怎麼樣,它們是否仍有機會在我的應用中佔一席位,我的答案基本上是「否」,我近來的工作主要集中在網頁開發,雖然 C 和 C++ 也可以用來寫網頁,但它們到底不是為這種工作而設計的,「為工作選擇適合的語言」,若果我需要編寫一個控制台應用,用來展示 bubble sort、quick sort 和 merge sort 的效能比較,我一定會使用 C / C++。若果我需要編寫一個相片簿系統,我會使用 PHP 或者 C#。