Yahoo! 的 PHP 面試題目(第三部份)
阿恆
若果你已經看過 Yahoo! 的 PHP 面試題目(第一部份)及第二部份,請繼續觀看第三部份第十一至第十六題,其餘題目已經在第四部份轉載。每一部份的都會先列出題目,題解會寫在後面。
- 在一個類別內如何存取這個類別的特性及變改它的值?
- include 和 include_once 有甚麼分別?require 又如何?
- 以下哪一個函式可以把瀏覽器轉向到另一個頁面?
- redir()
- header()
- location()
- redirect()
- 以下哪一個函式可以用來開啟檔案以便讀/寫?
- fget()
- file_open()
- fopen()
- open_file()
- mysql_fetch_row() 和 mysql_fetch_array() 有甚麼分別?
- 下面的代碼用來做甚麼?請解釋。
```php
$date='08/26/2003';
print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","\\2/\\1/\\3",$date);
```
以下是 Matt Wilkin 提供的解答:
- 在一個類別內如何存取這個類別的特性及變改它的值?
使用語句:$this->propertyName,例如:
```php
class myclass {
private $propertyName;
public function __construct() {
$this->propertyName = "value";
}
}
```
- include 和 include_once 有甚麼分別?require 又如何?
三者都是用來在腳本中插入其他檔案,視乎 url\_allow\_fopen 是否核准,這個檔案可以從系統內部或外部取得。但他們之間也有微細的分別:
**include()**:這個函式容許你在腳本中把同一個檔案插入多次,若果檔案不存在,它會發出系統警告並繼續執行腳本。
**include_once()**:它跟 include() 的功能相似,正如它的名字所示,在腳本的執行期間,有關檔案只會被插入一次。
**require()**:跟 include() 差不多,它也是用來在腳本中插入其他檔案,但若果檔案不存在,它會發出系統警告,這個警告會引致致命錯誤令腳本中止執行。
- 以下哪一個函式可以把瀏覽器轉向到另一個頁面?
-
redir()
這不是一個 PHP 函式,會引致執行錯誤。
-
header()
這個是正確答案,header() 用來插入卷頭資料,可以用來使瀏覽器轉向到另一個頁面,例如:
1
header("Location: http://www.search-this.com/");
-
location()
這不是一個 PHP 函式,會引致執行錯誤。
-
redirect()
這不是一個 PHP 函式,會引致執行錯誤。
-
- 以下哪一個函式可以用來開啟檔案以便讀/寫?
-
fget()
這不是一個 PHP 函式,會引致執行錯誤。
-
file_open()
這不是一個 PHP 函式,會引致執行錯誤。
-
fopen()
這是正確答案,fopen() 可以用來開啟檔案以便讀/寫,事實上這個函式還有很多選項,詳細資料請參閱 php.net。
-
open_file()
這不是一個 PHP 函式,會引致執行錯誤。
-
- mysql_fetch_row() 和 mysql_fetch_array() 有甚麼分別?
- mysql_fetch_row() 把數據庫的一列儲存在一個以零為基數的陣列中,第一欄在陣列的索引 0,第二欄在索引 1,如此類推。mysql_fetch_assoc() 把數據庫的一列儲存在一個關聯陣列中,陣列的索引就是欄位名稱,例如我的數據庫查詢送回「first_name」、「last_name」、「email」三個欄位,陣列的索引便是「first_name」、「last_name」和「email」。
- mysql_fetch_array() 可以同時送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。
- 下面的代碼用來做甚麼?請解釋。
```php
$date='08/26/2003';
print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","\\2/\\1/\\3",$date);
```
這是把一個日期從 MM/DD/YYYY 的格式轉為 DD/MM/YYYY 格式。我的一個好朋友告訴我可以把這個正規表達式拆解為以下的語句,對於如此簡單的表示是來說其實無須拆解,純粹為了解說的方便:
```php
// 對應一個或更多 0-9,後面緊隨一個斜號
$regExpression = "([0-9]+)/";
// 應一個或更多 0-9,後面緊隨另一個斜號
$regExpression .= "([0-9]+)/";
// 再次對應一個或更多 0-9
$regExpression .= "([0-9]+)";
```
至於 \\\\2/\\\\1/\\\\3 則是用來對應括號,第一個括號對的是月份,第二個括號對應的是日期,第三個括號對應的是年份。