1.2 一般語言特性
如果你不懂也不用擔心,後面的章節會詳細介紹PHP語法,此時只要知道大概做什麼就可以了。
PHP語言很強調緊湊性,這還反映在它能嵌套函數。例如,通過在一行代碼中按特定的順序調用函數,可以對一個值進行一系列修改。下面的例子中,將生成一個由5個字母或數字字符組成的字符串,如a3jh8:
PHP是一種類型松散的語言,這意味著不需要明確地創建變量、指派類型或撤銷變量,當然也沒有絕對禁止做這些操作。PHP對這些情況的處理是透明的,腳本中使用變量時PHP會動態創建變量,並使用最優推測規則自動指派變量的類型。例如,PHP認為下面的一組語句是完全合法的:
PHP還會在腳本結束時自動撤銷變量,將資源返回給系統。從這些方面來看,由於PHP在內部處理了編程的許多管理方面的問題,開發人員因而能夠集中精力去完成最終的目標——開發一個實用的應用程序。
目前,PHP有180個可用的庫,總共有1000余項功能。也許,你知道PHP能訪問數據庫、處理表單信息以及動態創建頁面,但你可能不知道PHP還有以下功能。
q 創建並處理Macromedia Flash、圖片和PDF文件。
q 將密碼與字典數據和容易破解的模式進行比較,評估密碼的可猜測性。
q 使用POSIX和基於Perl的正則表達式庫解析最復雜的字符串。
q 通過存儲在純文本文件、數據庫或Microsoft活動目錄中的登錄憑證來驗證用戶身份。
q 采用多種協議通信,包括LDAP、IMAP、POP3、NNTP和DNS等。
q 與大量信用卡處理解決方案集成。
這還沒有把PHP擴展與應用程序庫(PEAR)中的功能考慮進來,其中收集了幾百個易於安裝的開源包,可通過任意方式來進一步擴展PHP。可以從第11章學習更多關於PEAR的內容。在隨後的幾章中,你將學習很多這樣的庫,以及幾個PEAR包。
PHP開發人員很少只局限於一種實現方案。相反,這個語言為用戶提供了充分的選擇。例如,考慮一下PHP對數據庫的支持。PHP為25種以上的數據庫產品提供了內置支持,包括Adabas D、dBase、Empress、FilePro、FrontBase、Hyperwave、IBM DB2、Informix、Ingres、Interbase、mSQL、MicrosoftSQL- Server、MySQL、Oracle、Ovrimos、PostgreSQL、Solid、Sybase、UNIX dbm和Velocis。此外,也可以利用抽象層功能來訪問Berkeley DB類型的數據庫。還可以使用一些一般性的數據庫抽象方案,其中最為流行的有PDO(http://www.php.net/pdo)和MDB2(http://pear.php.net/package/MDB2)。最後,如果你想找一個對象關系映射(ORM)解決方案,諸如Propel(http://propel.phpdb.org/trac/)這樣的項目應當非常合適。
PHP靈活的字符串解析功能為不同水平的用戶提供了選擇,不僅能夠(利用字符串處理函數)立即開始完成復雜的字符串操作,還可以(利用正則表達式)將有類似功能的程序(如Perl和Python)快速移植到PHP。除了超過85個字符串處理函數之外,PHP還支持POSIX和基於Perl的正則表達式格式。
你更喜歡函數式編程語言嗎?還是采用面向對象范型(object-oriented paradigm)的語言?PHP對二者都提供了全面的支持。雖然PHP最初只是一種函數式語言,但開發人員很快就意識到提供流行的OOP范型的重要性,並開始實現一種可擴展的解決方案。
這裡反復強調的重點是,使用PHP,我們可以充分利用目前掌握的技能,只需投入很少的時間就能很快地開始PHP開發。這種策略在整個語言中頻頻出現,這裡提到的只是其中很少的一部分例子。
PHP從一開始就對使用、修改和再分發沒有任何限制。最近幾年,滿足這種開放許可限制的軟件被稱為開源(open-source)軟件。開源軟件和因特網就像面包和黃油一樣密不可分。開源項目如Sendmail、Bind、Linux和Apache都在因特網的發展方面起到了非常重要的作用。雖然媒體最為追捧的是開源軟件可以自由使用,但它還有另外幾個同樣重要的特點(甚至更重要)。
q 沒有大多數商業產品所要求的許可限制。商業軟件往往有許多許可限制,而開源軟件的用戶沒有這些限制。雖然在許可權限上存在差異,但一般來講,用戶都能自由地修改和重新分發開源軟件,還能將開源軟件整合到其他產品中。
q 開放式開發和評審過程。雖然也曾有過一些意外事件,但開源軟件在安全方面還是享有很好的聲譽。這種高標准正是開放式開發和評審過程的結果。因為任何人都能自由使用源代碼,所以安全漏洞和潛在的問題會很快被發現並得以修復。開源倡導者Eric S. Raymond很好地總結了這項優點,他說:“只要有足夠多雙眼睛,所有的bug都無處遁形。”
鼓勵參與。開發團隊不限於某個組織。任何感興趣的人,只要具有相應的能力,都可以自由地加入到項目中。由於不對成員進行限制,這就大大增加了項目的人才儲備,必然能貢獻出更高質量的產品。