展開文件目錄

語法高亮

編程範式

PHP 是一個彈性的動態語言,支援多種編程技術。這幾年一直不斷的進化,重要的里程碑包含 PHP 5.0 (2004) 增加完善的物件導向模型,PHP 5.3 (2009) 增加匿名函式與命名空間以及 PHP 5.4 (2012) 增加的 traits。

物件導向編程

PHP 擁有完整的物件導向編程的特性,包含支援類別、抽象類別、介面、繼承、構造函數、克隆和異常等。

函式編程

PHP 支援第一類函式(first-class function),即函式可以被賦值給一個變數,包括使用者自定義或者是內建函式,然後動態調用它。函式可以作為參數傳遞給其他函式(稱作高階函數),也可以做完函數返回值返回。

PHP 支援遞迴,也就是函式可以呼叫自己,但多數 PHP 程式碼較常使用迭代。

自從 PHP 5.3 (2009) 之後開始引入支援閉包匿名函式。

PHP 5.4 支援將閉包綁定到物件的作用域中,並改善其可調用性,如此即可在大部分狀況下使用匿名函式取代一般函式。

元編程

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

命名空間

如前所述,PHP 社群裡許多開發者已經開發了大量的程式碼。這意味著一個函式庫的的 PHP 程式碼可能使用了另外一個函式庫中相同的類別名稱。如果他們使用同一個命名空間,那將會產生衝突導致異常。

命名空間 解決了這個問題。如 PHP 手冊裡所描述,命名空間類似作業系統中的目錄,兩個同名的文件可以共存於不同的目錄下。同理兩個同名的 PHP 類別可以在不同的 PHP 命名空間下共存,就這麼簡單。

因此把你的程式碼放在你的命名空間下就非常重要,避免其他開發者擔心與第三方函式庫衝突。

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

2013 年 12 月,PHP-FIG 發布了新的自動加載標準:PSR-4,期望將來替換 PSR-0 標準。但 PSR-4 要求 PHP 5.3 以上的版本,而許多專案都還是使用 PHP 5.2,所以目前兩個都能使用。如果你在新應用或套件中使用自動加載標準,應優先考慮使用 PSR-4。

標準 PHP 函式庫

標準 PHP 函式庫(SPL)隨著 PHP 一起發佈,提供了一組類別和介面。包含了常用的資料結構類別(堆疊、佇列、堆積等等),以及遊走這些資料結構的迭代器,或者你可以自己實作 SPL 介面。

命令列介面

PHP 主要是用來開發網頁應用程式,但用來開發命令列介面(CLI)程式也很好用。命令列程式可以幫你完成自動化的任務,如測試、部署和應用管理。

CLI 程式很強大,因為你可以直接使用應用的程式碼而不需要為它建立網頁圖形化介面。唯一要注意的是,請不要將你的 CLI 程式放置在公開的網頁根目錄下。

試著在命令列下執行 PHP:

> php -i

選項 -i 會像 phpinfo 函式一樣將你的 PHP 設定值顯示出來。

選項 -a 提供一個互動式介面,類似 ruby 的 IRB 或者是 python 的互動式介面。此外還有其他有用的 命令列選項

接下來,來寫一個簡單的 “Hello, $name” CLI 程式。首先建議一個名為 hello.php 的檔案如下。

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

PHP 會在程式執行時根據參數建立兩個特別的變數,$argc 是一個整數,代表參數的 個數$argv 則是一個陣列變數包含了每個參數的 。而第一個變數就是你的程式檔名,如此例中即是 hello.php

命令執行失敗時,可以使用 exit() 表達式來返回一個非零整數來告知 Shell。常用的 exit 返回值可以查看 列表

執行上述的程式,在命令列輸入:

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

XDebug

除錯器是軟體開發過程中一個相當有用的工具。透過它可以追蹤程式碼執行過程、查看堆疊資訊。XDebug 是一個 PHP 除錯器,能夠整合在多款 IDE 內,提供中斷點和查看堆疊訊息等功能,還可以和 PHPUnit 、 KCacheGrind 這類工具配合,提供計算程式碼涵蓋率與程式碼分析。 單單依靠 var_dump/print_r 來除錯的你, 是否經常處在困境中,除錯器將會是你的最佳救星,趕緊來試試看吧。

安裝 XDebug 有些麻煩,但其中一個重要功能"遠端除錯" ——如果你是在本機端進行開發,並在虛擬機器或其他主機上進行測試,那麼"遠端除錯"這個功能將對你非常有用。

通常,你需要修改 Apache VHost 或 .htaccess 檔案,加入以下設定:

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

"remote host" 和 "remote port" 將會對應本機位置與 IDE 監聽埠 ,同時 IDE 開啟等待連接模式,並拜訪此網址:

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

如此 IDE 就會監控腳本的執行,讓你可以設定中斷點和查看變數值。

圖形化的除錯器讓逐步檢視程式碼、查看變數與即時監看變得十分容易。許多 IDE 內建或是提供套件安裝 xdebug 除錯器。例如 MacGDBp 是一套 Mac 上免費、開源的軟體。