鍍金池/ 教程/ PHP/ 語言亮點
入門指南
緩存
服務器和部署
測試
資源
數(shù)據(jù)庫
安全
Coding Practices
代碼風格指南
語言亮點
依賴管理

語言亮點

編程范式

PHP是一個靈活的動態(tài)語言,支持多種編程范式。這些年來一直在不斷的進化,重要的里程碑包括PHP 5.0 (2004)增加完善的 面向對象模型、PHP 5.3 (2009)增加匿名函數(shù)和命名空間和PHP 5.4 (2012)增加traits.

面向對象編程

PHP具有完整的面向對象編程特性,如類、抽象類、接口、繼承、構造函數(shù)、克隆和異常等。

函數(shù)式編程

PHP支持第一類函數(shù)(first-class function),即函數(shù)可以賦值給變量,包括用戶自定義的函數(shù)和內置函數(shù),然后動態(tài)調用它。 函數(shù)可以作為參數(shù)傳遞給其他函數(shù)(即高階函數(shù)),也可以作為函數(shù)返回值返回。

PHP支持函數(shù)遞歸調用,即函數(shù)自己調用自己,不過在實際的PHP代碼中,我們更喜歡用迭代來代替遞歸。

2009年發(fā)布的PHP 5.3開始引入支持閉包的匿名函數(shù)。

PHP 5.4支持把閉包綁定到對象作用域,并改善其可調用性,從而可以在大部分場景中使用匿名函數(shù)替代普通函數(shù)。

元編程

PHP通過反射API和魔術方法機制,支持多種方式的元編程。開發(fā)者通過魔術方法,如__get(), __set(), __clone(), __toString(), __invoke()等,可以改變類的行為。Ruby開發(fā)者經(jīng)常說PHP沒有method_missing方法,實際上通過__call()__callStatic()就可以 完成同樣的功能。

命名空間

如前所述,PHP社區(qū)的眾多開發(fā)者已經(jīng)開發(fā)了大量的代碼。這意味著一個函數(shù)庫中的PHP代碼可能使用了另外一個庫中相同的類名,如果它們共享一個命名空間,則會產生沖突導致異常。

_命名空間_解決了這個問題。如PHP手冊里描述的那樣,命名空間類似于操作系統(tǒng)中的目錄,兩個同名文件可以共存于不同的目錄。同理,同名的PHP類可以在不同的PHP命名空間下共存,就這么簡單。

因而把代碼放在自己的命名空間下就顯得非常必要,這樣其他人就可以放心的使用這些代碼,而無需擔心與其他函數(shù)庫的命名沖突。

PSR-0 里提供了命名空間的推薦使用方式, 它試圖提供一個標準的文件、類和命名空間的使用慣例,從而讓代碼做到即插即用。

2013年12月,PHP-FIG發(fā)布了新的自動加載標準:PSR-4,將來可能會替換舊的PSR-0標準。PSR-4要求PHP5.3版本以上,而目前很多項目用的都是PHP5.2, 因此當前兩個標準都可用,但是對于新應用或者包的話,應優(yōu)先考慮PSR-4.

  • 了解更多命名空間
  • 了解更多PSR-0
  • 了解更多PSR-4

標準PHP庫

標準PHP庫(SPL)和PHP一起發(fā)布,提供了一組類和接口,包括了常用的數(shù)據(jù)結構如棧,隊列和堆等,以及遍歷這些數(shù)據(jù)結構的迭代器, 或者你還可以自己實現(xiàn)SPL接口。

  • 學習更多SPL

命令行接口

PHP的主要目的是開發(fā)Web應用,不過它的命令行腳本接口(CLI)也非常有用。PHP命令行編程可以幫你完成自動化的任務,如測試,部署和 應用管理。

CLI PHP編程非常強大,可以直接調用你自己的app代碼而無需創(chuàng)建Web圖像界面,需要注意的是不要把CLI PHP腳本放在公開的web目錄下!

在命令行下運行PHP:

> php -i

選項-i將會打印PHP配置,類似于[phpinfo][33]函數(shù)。

選項-a提供交互式shell,和ruby的IRB或python的交互式shell相似,此外還有很多其他有用的[命令行選項][34]。

接下來寫一個簡單的"Hello, $name" CLI程序,先創(chuàng)建名為hello.php的腳本:

<?php
if($argc != 2) {
    echo "Usage: php hello.php [name].\n";
    exit(1);
}
$name = $argv[1];
echo "Hello, $name\n";

PHP會在腳本運行時根據(jù)參數(shù)創(chuàng)建兩個特殊的變量,$argc是一個整數(shù),表示參數(shù)個數(shù),$argv是一個數(shù)組變量,包含每個參數(shù)的值, 它的第一個元素一直是PHP腳本的名字,如本例中為hello.php。

命令運行失敗時,可以通過exit()表達式返回一個非0整數(shù)來通知shell,常用的exit返回碼可以查看列表

運行上面的腳本,在命令行輸入:

> php hello.php
Usage: php hello.php [name]
> php hello.php world
Hello, world

學習如何在命令行運行PHP

學習如何在Windows環(huán)境下運行PHP命令行程序

XDebug

調試器是軟件開發(fā)過程中非常重要的一個工具,通過它,可以跟蹤代碼的執(zhí)行過程,查看堆棧信息。XDebug是一個PHP調試器,可以集成在常見的IDE中,提供設置斷點、 查看堆棧信息等功能,還可以和PHPUnit、KCacheGrind等工具配合,執(zhí)行代碼覆蓋率測試和性能調優(yōu)。

如果你現(xiàn)在還沒有使用調試器,僅僅依靠var_dump/print_r調試的話,XDebug就是你的最佳選擇。

安裝XDebug有點復雜,其中一個重要功能"遠程調試"——如果你在本地開發(fā)代碼,然后在虛擬機或其他主機中測試,那么它對你就非常有用。

通常,你需要修改Apache虛擬主機或者.htaccess配置文件,增加:

    php_value xdebug.remote_host=192.168.?.?
    php_value xdebug.remote_port=9000

"remote host"和"remote port"對應本機IDE的監(jiān)聽地址和端口,然后設置IDE為"等待連接"模式,打開URL:

    http://your-website.example.com/index.php?XDEBUG_SESSION_START=1

這樣IDE就會監(jiān)控腳本的執(zhí)行,允許用戶設置斷點和查看內存中的變量值。

圖形化調試器使得單步調試、查看變量和現(xiàn)場運行代碼變得異常簡單,很多IDE都自帶或者通過第三方插件支持xdebug的調試,如Mac平臺下的開源軟件MacGDBp。

了解更多XDebug 了解更多MacGDBp

上一篇:測試下一篇:服務器和部署