從Fedora core 3 升級到 core 4,正確的說,應該是從PHP4升級到PHP5的時候,是不是發生了一些小問題。至少,我是如此。雖然問題終究還是解決了,但是從網路上一些討論PHP5的文章,大多著重於其OO的改變上。事實上,除了這些,我還發現了一些新功能,與新設定。



  • register_long_arrays in php.ini

就是這個新設定讓我的blog暫停了一陣子。Default 它的值是off ,這會造成使用$HTTP_XXX_VARS(XXX = POST, GET, SESSION ...)的程式取不到值,將register_long_arrays設成on是治標方法,因為設定成ON較影響PHP的效率。治本就是將程式中$HTTP_XXX_VARS 改成 $_XXX (例如:$_POST)。

  • foreach的超強新功能

首先,他提供了傳址(reference)功能,這使得要改變一個array更加方便,參考以下範例(取自www.php.net):

<?
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
?>
若在PHP4則需寫成
<?
$arr = array(1, 2, 3, 4);
$i=0;
foreach ($arr as $value) {
$arr[$i++] = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
?>

其次,foreach可以使用在物件,詳細的內容下一篇專門討論物件的文章再說,基本上,程式是像這樣的:

<?
$myobj = new MyClass();
foreach ($myobj as $k =>$v) {
echo "$k = $v";
}
#會印出myobj中所有visibale properties的值
?>

是不是很強呢?

  • 新增 try...catch

PHP5新增了 Try-Catch來handle 例外。如同Java它也可以丟出一個自訂的例外。要產生一個例外是用

throw new Exception();

而自訂的例外就是繼承 Exception Class:

class MyException extends Exception {

...................

}

以上就是我的發現,應該還有很多東西有待我們去發覺吧!!