目前,大多數php(做為現在的主流開發語言)安裝還是使用php(做為現在的主流開發語言) 4.x版本。實際上,php(做為現在的主流開發語言) 5.0已經出台一段時間了,而如今php(做為現在的主流開發語言) 5.1.1也剛剛發行。如果你還沒有升級到這些新版本,那麼讓我們一同看一下在新版的php(做為現在的主流開發語言)中的變化,並在最後討論對於php(做為現在的主流開發語言) 6所期望的特性。
一、php(做為現在的主流開發語言) 5.0中的變化
作為一個全新的版本號,在php(做為現在的主流開發語言) 4和php(做為現在的主流開發語言) 5之間存在許多實質性的區別。大多數的炒作主要圍繞被重新改寫過的新的對象模型。php(做為現在的主流開發語言) 5版本更為完整並且運行性能更為良好。在php(做為現在的主流開發語言) 4中,對象其實僅是一個粗糙的數據類型,並且是值引用的。在試圖保持盡可能多的向後兼容性的同時,在php(做為現在的主流開發語言) 5中,設置zend.ze1_compatibility_mode可以允許與版本4中方法的兼容。當然,php(做為現在的主流開發語言) 5也存在一些向後不兼容的改變,具體包括:
·新的保留下來的關鍵字大多數與對象模型相關(exception,final, php(做為現在的主流開發語言)_user_filter,interface,implements,extends,public,private,protected,abstract,clone,try,catch,
throw)。在php(做為現在的主流開發語言) 4中保留的兩個單詞不再存在(cfunction,old_function)。
·如果一個對象沒有任何屬性,那麼它不再為空(empty)。
·現在array_merge()函數只接收數組。
·類可以在使用前聲明(依賴於具體情況)。
·get_class(),get_parent_class()和get_class_methods()現在能夠返回一個大小寫敏感的結果,而以前的返回結果都是小寫的。
·strrpos()和strripos()現在使用整個字符串。例如,var_dump(strrpos(ABCDEF,DAF))將在php(做為現在的主流開發語言) 4中返回int(3),而在php(做為現在的主流開發語言) 5中返回bool(false)
·如果$_SERVER存在,它將用argc和argv進行填充-這就允許CLI版本總是可以存取這些數據。
·當傳遞一個無效的IP地址時,ip2long()返回FALSE而不是-1。
·定義在一個包括文件中的函數現在能夠在任何時刻為主文件所調用。如果文件兩次被包括(這時函數已經被定義了),php(做為現在的主流開發語言) 5也將發出一個致命的錯誤。
·require_once()和include_once函數現在考慮到了Windows大小的不敏感性,並且將每次僅包括一個文件-即使該函數以不同大小寫的文件名被調用多次。
·擺脫了原來php(做為現在的主流開發語言) 4中的警告。新的php(做為現在的主流開發語言) 5在遇到一個無效的字符串偏移量時將拋出一個錯誤。
·Tokenizer擴展不再定義閒置的T_ML_COMMENT常量。
注意,這些看似較多的不兼容的變化其實並不大,而且如果你想把原有代碼移植到php(做為現在的主流開發語言) 5中的話,有可能只對你的腳本作極少量的修改即可。php(做為現在的主流開發語言) 5為做許多事情提供了更好的方法,但是如果你的目的僅是為了能使程序運行,那麼你不會遇到太多的麻煩。在php(做為現在的主流開發語言) 5中的另外一些變化有: