一張保單輕鬆享有人生各階段風險保障
通通幫您規畫好
搬家公司您還敢使用滿是變種細菌的電話通話嗎
請定期電話清潔消毒,

首頁  •  tw 論壇 • 程式設計討論     • 

[php] 程式設計師需要注意的 PHP 5.4 變化

房東:張俊
發表時間:2013-04-21
[檢舉]


PHP 5.4.0 在美國時間2012年3月1號釋出,到現在已經發展到 5.4.3,之前寫過一篇 PHP 5.4.0 released!! 新功\能,這次我們來探討看看 PHP 5.4.x 對於程式設計師在轉換平台或者是開發新功\能所需要注意的地方。


Incompatible Changes


1. Safe mode 不再被支援,如果專案有任何牽扯到 Safe mode,請務必要調整

2. Magic quotes 正式被移除,基本上目前開發 PHP 程式,務必將此設定為 FALSE,這樣之後轉移機器比較不會有任何問題,由於此設定已被移除,所以 get_magic_quotes_gpc() and get_magic_quotes_runtime() 這兩函式都會直接 return FALSE;

3. php.ini 正式移除 register_globals and register_long_arrays 兩項設定,這就不必多說了,遇到 POST 或 GET 資料,請大家全部改用 $_POST$_GET

4. 移除 Call-time pass by reference 功\能


以前可以 Call-time pass by reference 傳位址到 function 參數



<?php

function foo($var)

{

$var++;

}



$a=5;

foo(&$a);

// $a is 6 here

?>


5.4.X 請改寫成底下方式



<?php

function foo(&$var)

{

$var++;

}



$a=5;

foo($a);

?>


或是用 global 寫法



<?php

$a = 5;

function foo()

{

global $a;

$a++;

}

// $a is 6 here

?>


5. break and continue 不再接受變數參數 (e.g., break 1 + foo() * $bar;),另外 break 0; 跟 continue 0; 也不能使用,只能直接使用 break 1; break 2; 等


之前如果這樣寫



$num = 2;

break $num;


在 5.4.x 請改寫成



break 2;


6. 在 date and time extension,timezone 不再使用 TZ environment variable,進而取代用 php.ini 裡的 date.timezone 或者是使用 php date_default_timezone_set() function,如果都沒有設定,PHP 將會吐出 E_WARNING 訊息


7. isset()empty() 變化


我想大家對這兩個函數並不陌生,isset 用來判斷變數是否存在,empty 用來判斷變數是否為空值,在 5.4 比較值得注意的地方是 isset on string 的用法。


PHP 5.3.x 以前



<?php

$expected_array_got_string = \'somestring\';

var_dump(isset($expected_array_got_string[\'some_key\']));

var_dump(isset($expected_array_got_string[0]));

var_dump(isset($expected_array_got_string[\'0\']));

var_dump(isset($expected_array_got_string[0.5]));

var_dump(isset($expected_array_got_string[\'0.5\']));

var_dump(isset($expected_array_got_string[\'0 Mostel\']));

?>


大家會發現全部 return true;,可是到了 PHP 5.4.X 版本,除了 [0] 或 [\'0\'] 會 return true 之外,其他都是 return false;。不過個人建議程式最好不要這樣寫,在判斷變數是否存在的時候,最好先透過 is_array()is_string() 判斷此變數是 array 或者是 string,反而上面的舉例是很少看到的。


8. 禁止 super globals 變數當作任何 function 參數,例如:



function ($_POST, $_GET) {

}


9. 移除 session_is_registered(), session_register() and session_unregister() function。


Session 的操作其實非常簡單,上面的 function 其實都是多餘的。


判斷 Session 是否存在:



if (isset($_SESSION[\'foo\']))

{

echo \'session is exist\';

}


註冊 Session



$_SESSION[\'foo\'] = \'bar\';


移除 Session



unset($_SESSION[\'foo\']);


結論是操作 Session 就等同於操作 array 是一樣意思,所以才說那三個 function 早該移除了。


新功\能 (New features)


可以先看之前寫的一篇 PHP 5.4.0 released!! 新功\能 裡面提到 traits, array 新用法以及 web server in CLI mode,另外底下在整理幾點新功\能:


1. short_open_tag 不需要設定就可以支援,也就是說底下程式會變成通用寫法


我們在 view 裡面都會這樣寫



<?php echo $foo; ?>


或者是(先決條件是將 short_open_tag 設定為 on)



<?= $foo;?>


但是在 PHP 5.4.X 之後全部支援 short_open_tag 寫法。不過勸大家還是不要懶惰,用最原始的寫法還是最安全的。


2. 支援 Class member access on instantiation has been added


以前宣告 Class 都必須透過指定單一變數



$test = new foo();

$test->bar();


5.4.X 可以透過底下寫法



(new foo)->bar();


其實還有很多細節的部份,可以直接參考官網 Migrating from PHP 5.3.x to PHP 5.4.x,希望上面的例子,可以讓大家更瞭解 PHP 5.4.X。





  • 贊助網站       

    廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲
    完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心!
    廣利不動產-新板特區指名度最高、值得您信賴的好房仲
    您的托付,廣利用心為您服務

  • 1 樓住戶:小蛙     留言板  傳訊
    發表時間:2013-04-22
    [檢舉]

    cookie
    http://php.net/manual/en/function.setcookie.php

    post
    http://php.net/manual/en/reserved.variables.post.php

    http://yiyingloveart.blogspot.tw/2012/02/php-post.html



     共 1 人回應  選擇頁數 【第1 頁】 

    姓名:
    佈告內容: