記得10年前左右我學VB6時,很多人說VB6學壞手勢,話學Delphi好,當然呢o的已經係歷史話題。但前排睇左幾篇Blog文,話PHP是次選語言,不會是初學者的首選,我都很同意,亦令我想起”學壞手勢”呢四隻字。

PHP的問題,其實在於太過寬鬆,好似近排我工作上是寫PHP就有很多令我出奇的情況。
疑問1:

<?php
$_SESSION['info_1'] = "1"; // assign value
$_SESSION['info_2'] == "2"; // compare value
?>

第一個Session很正常,只是assign “1″給info_1 ,但第二個Session沒出現Error卻很奇怪,不論是true或false,起沒有主體或不是condition情況下,卻Syntax成立,如果不小心打多一個”=”符號,整個程式就已經錯誤。

疑問2:

<?php
$select = "SELECT login_id FROM user";
$rs = mysql_query($select);
$row = mysql_fetch_assoc($rs); //data reader pointer 在第一行
echo $row["login_id"]; //output : sam
// 100行code後
$select_pwd = "SELECT password FROM user";
$rs_pwd = mysql_query($select_pwd);
$row = mysql_fetch_assoc($rs_pwd); //示範:忘記之前已經使用$row
echo $row["password "]; //output password string: ASj89qa
?>

這段Code看似沒有問題,只是重用變數,但我卻奇怪為什麼PHP不搞好少少,雖然$row只是in-memory的data集合,但不論JSP或ASPX,這類DataReader/Datatable已經是一個物件,不用New而且在沒有關閉的情況下可以重用有點怪怪.(例如.NET datareader都要進行DataReader.Close() ; DataTable只要結構和第一次不同,都要重構一次。

疑問3:
Include/Require無限Loop…這個是人為問題,很多PHP程式都是這樣,鐘意Include library,function,variable,但Include之中再Include,多層Level的引用Class方式,我卻覺得只會一個亂字,雖然很多IDE可以Open Declaration,但係呢種手法我真係不感恭維。而且不同Folder,層層疊疊下真係頭都暈。
C.php有Function C
B.php include C.php 用Function C
但又會有A.php include B.php去Call function C…..

疑問4:

$varInt = 1;
$varString = "2";
echo $varInt.$varString; //Output : 12 (OMFG~)

全部都係是Dynamic Type,PHP不用設Data Type,無論你是什麼類型,都可以用於一個Variable上,但這正是”學壞手勢”的根源。為什麼一個看似Int的類型可以和String結合,這是不可能發生在C#上的。

其實還有很多奇怪地方都是出自PHP語法太過flexible,當然有好有唔好,好既就係可以好快咁寫到一個網頁程式,唔好既就係潛移默化了一些錯誤的觀念。

有幾個好網,很值得一睇,更加深入講解點解PHP不是一隻首選Langauge。
PHP ‘Good’ Practices
http://rubayeet.wordpress.com/2008/08/27/php-good-practices/
A simple ‘Gotcha’ in PHP
http://rubayeet.wordpress.com/2008/04/29/a-simple-php-gotcha/
PHP is a good second programming language(but never a first)
http://rubayeet.wordpress.com/2008/05/10/php-is-a-good-second-programming-language/
Is PHP a good first language?
http://codeutopia.net/blog/2008/05/01/is-php-a-good-first-language/

收藏或分享這篇文章:
  • email
  • Facebook
  • Twitter
  • del.icio.us
  • Google Bookmarks
  • Digg

更多相關文章:

    What are Lambda Expressions?
    English: Lambda expressions, new in...
    Facebook API 初試
    前排香港好像好興玩一隻叫”古惑仔”的Facebook Application,我都玩左10分鐘左右,覺得太過無聊,所以就Remove了…不過就玩過下Facebook API,原因是想知道這API的商業價值。因為FB的Application是很多,但是真正Third Party的Application好像真的很少呢。 Facebook的API跟PayPal...
    JavaFX
    自2007年時聽過JavaFX後,都好似沒有細節公佈,剛剛JavaOne Conference 2008再次發表一些新消息。 看到Key Point好像幾吸引,至少我覺得RIA程式來說,Silverlight門檻是比較高的。...

太差了!沒有什麼特別。值得一看。精彩!經典! (暫時未有評分)
Loading ... Loading ...