鍍金池/ 教程/ PHP/ 語言亮點(diǎn)
依賴管理
安全
測試
使用模板
開發(fā)實(shí)踐
入門指南
服務(wù)器與部署
社區(qū)
語言亮點(diǎn)
錯(cuò)誤與異常
虛擬化技術(shù)
資源
文檔撰寫
數(shù)據(jù)庫
依賴注入
緩存
代碼風(fēng)格指南

語言亮點(diǎn)

編程范式

PHP 是一個(gè)靈活的動(dòng)態(tài)語言,支持多種編程技巧。這幾年一直不斷的發(fā)展,重要的里程碑包含 PHP 5.0 (2004) 增加了完善的面向?qū)ο竽P?,PHP 5.3 (2009) 增加了匿名函數(shù)與命名空間以及 PHP 5.4 (2012) 增加的 traits。

面向?qū)ο缶幊?/h3>

PHP 擁有完整的面向?qū)ο缶幊痰奶匦?,包括類,抽象類,接口,繼承,構(gòu)造函數(shù),克隆和異常等。

函數(shù)式編程 Functional Programming

PHP 支持函數(shù)是"第一等公民",即函數(shù)可以被賦值給一個(gè)變量,包括用戶自定義的或者是內(nèi)置函數(shù),然后動(dòng)態(tài)調(diào)用它。函數(shù)可以作為參數(shù)傳遞給其他函數(shù)(稱為高階函數(shù)),也可以作為函數(shù)返回值返回。

PHP 支持遞歸,也就是函數(shù)自己調(diào)用自己,但多數(shù) PHP 代碼使用迭代。

自從 PHP 5.3 (2009) 之后開始引入對(duì)閉包以及匿名函數(shù)的支持。

PHP 5.4 增加了將閉包綁定到對(duì)象作用域中的特性,并改善其可調(diào)用性,如此即可在大部分情況下使用匿名函數(shù)取代一般的函數(shù)。

元編程

PHP 通過反射 API 和魔術(shù)方法,可以實(shí)現(xiàn)多種方式的元編程。開發(fā)者通過魔術(shù)方法,如 __get(), __set(), __clone(), __toString(), __invoke(),等等,可以改變類的行為。Ruby 開發(fā)者常說 PHP 沒有 method_missing 方法,實(shí)際上通過 __call()__callStatic() 就可以完成相同的功能。

命名空間

如前所述,PHP 社區(qū)已經(jīng)有許多開發(fā)者開發(fā)了大量的代碼。這意味著一個(gè)類庫的 PHP 代碼可能使用了另外一個(gè)類庫中相同的類名。如果他們使用同一個(gè)命名空間,那將會(huì)產(chǎn)生沖突導(dǎo)致異常。

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

因此把你的代碼放在你的命名空間下就非常重要,避免其他開發(fā)者擔(dān)心與第三方類庫沖突。

PSR-4 提供了一種命名空間的推薦使用方式,它提供一個(gè)標(biāo)準(zhǔn)的文件、類和命名空間的使用慣例,進(jìn)而讓代碼做到隨插即用。

2014 年 10 月,PHP-FIG 廢棄了上一個(gè)自動(dòng)加載標(biāo)準(zhǔn): PSR-0,而采用新的自動(dòng)加載標(biāo)準(zhǔn) PSR-4。但 PSR-4 要求 PHP 5.3 以上的版本,而許多項(xiàng)目都還是使用 PHP 5.2,所以目前兩者都能使用。如果你在新應(yīng)用或擴(kuò)展包中使用自動(dòng)加載標(biāo)準(zhǔn),應(yīng)優(yōu)先考慮使用 PSR-4。

PHP 標(biāo)準(zhǔn)庫

PHP 標(biāo)準(zhǔn)庫 (SPL) 隨著 PHP 一起發(fā)布,提供了一組類和接口。包含了常用的數(shù)據(jù)結(jié)構(gòu)類 (堆棧,隊(duì)列,堆等等),以及遍歷這些數(shù)據(jù)結(jié)構(gòu)的迭代器,或者你可以自己實(shí)現(xiàn) SPL 接口。

命令行接口

PHP 是為開發(fā) Web 應(yīng)用而創(chuàng)建,不過它的命令行腳本接口(CLI)也非常有用。PHP 命令行編程可以幫你完成自動(dòng)化的任務(wù),如測試,部署和應(yīng)用管理。

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

在命令行下運(yùn)行 PHP :

{% highlight console %}
> php -i
{% endhighlight %}

選項(xiàng) -i 將會(huì)打印 PHP 配置,類似于 phpinfo() 函數(shù)。

選項(xiàng) -a 提供交互式 shell,和 Ruby 的 IRB 或 python 的交互式 shell 相似,此外還有很多其他有用的命令行選項(xiàng)。

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

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

PHP 會(huì)在腳本運(yùn)行時(shí)根據(jù)參數(shù)設(shè)置兩個(gè)特殊的變量,$argc 是一個(gè)整數(shù),表示參數(shù)個(gè)數(shù),$argv 是一個(gè)數(shù)組變量,包含每個(gè)參數(shù)的, 它的第一個(gè)元素一直是 PHP 腳本的名稱,如本例中為 hello.php。

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

運(yùn)行上面的腳本,在命令行輸入:

{% highlight console %}
> php hello.php
Usage: php hello.php [name]
> php hello.php world
Hello, world
{% endhighlight %}

Xdebug

合適的調(diào)試器是軟件開發(fā)中最有用的工具之一,它使你可以跟蹤程序執(zhí)行結(jié)果并監(jiān)視程序堆棧中的信息。 Xdebug 是一個(gè) php 的調(diào)試器,它可以被用來在很多 IDE(集成開發(fā)環(huán)境) 中做斷點(diǎn)調(diào)試以及堆棧檢查。它還可以像 PHPUnit 和 KCacheGrind 一樣,做代碼覆蓋檢查或者程序性能跟蹤。

如果你仍在使用 var_dump()/print_r() 調(diào)錯(cuò),經(jīng)常會(huì)發(fā)現(xiàn)自己處于困境,并且仍然找不到解決辦法。這時(shí),你該使用調(diào)試器了。

安裝 Xdebug 可能很費(fèi)事,但其中一個(gè)最重要的「遠(yuǎn)程調(diào)試」特性 —— 如果你在本地開發(fā),并在虛擬機(jī)或者其他服務(wù)器上測試,遠(yuǎn)程調(diào)試可能是你想要的一種方式。

通常,你需要修改你的 Apache VHost 或者 .htaccess 文件的這些值:

{% highlight ini %}
php_value xdebug.remote_host=192.168.?.?
php_value xdebug.remote_port=9000
{% endhighlight %}

「remote host」 和 「remote port」 這兩項(xiàng)對(duì)應(yīng)和你本地開發(fā)機(jī)監(jiān)聽的地址和端口。然后將你的 IDE 設(shè)置成「listen for connections」模式,并訪問網(wǎng)址:

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

你的 IDE 將會(huì)攔截當(dāng)前執(zhí)行的腳本狀態(tài),運(yùn)行你設(shè)置的斷點(diǎn)并查看內(nèi)存中的值。

圖形化的調(diào)試器可以讓你非常容易的逐步的查看代碼、變量,以及運(yùn)行時(shí)的 evel 代碼。許多 IDE 已經(jīng)內(nèi)置或提供了插件支持 XDebug 圖形化調(diào)試器。比如 MacGDBp 是 Mac 上的一個(gè)免費(fèi),開源的單機(jī)調(diào)試器。

上一篇:錯(cuò)誤與異常下一篇:資源