PHP 的 PSR-{0,1,2} 中文版翻譯...

查資料的時候發現有人已經翻譯好 PSR-{0,1,2}:

想要快速了解 PSR 在定義什麼,可以直接看中文版,如果有覺得不懂的地方再去翻英文版的原文敘述。

關於可維護的 PHP 專案:PHP-FIG 的 PSR-0、PSR-1、PSR-2

一個組織裡要導入 coding standatd & coding style 時是功夫最少的時候,除非有特殊理由,不然我一向都是建議:

不要自己發明 coding standard 與 coding style,如果社群的規範合理,就照著社群的規範走。

社群中比較完整的包括:

兩份大多數的規範是相同的 (因為 community 已經有習慣了),不過現在感覺起來 PHP-FIG 比較熱鬧一點 (參與的人來自不同的專案),如果讓我推薦的話我會建議用 PSR-{0,1,2}。

Reply to「寫出好維護的 PHP 程式碼」。

PHP 康莊大道

前陣子看到的「PHP The Right Way.」網站。網站的開頭就先提到這並不是說明 PHP 怎麼寫才是對的,而是告訴你許多前人經驗所得到的建議:(血淚史 XD)

Disclaimer

There is no canonical way to use PHP. However, this website is a humble display of best practices, available options, and good information. It aims to introduce new PHP developers and to rethink seasoned pros with fresh ideas.

這個網站是導讀性質,告訴你現在 PHP 大約有哪些新東西需要看。

最近比較常提出來的幾個是:

  • PSR-0 規範 (還有 PSR-1 與 PSR-2)。
  • 很多新的 SPL 出現,如果可以用就應該儘量用現成的,不需要自己造輪子。
  • 針對資料庫的操作儘量用 PDO,不要用 mysql_*

PHP 5.4 與 php-test-helpers

先給連結,PHP 5.4 可以編的版本在這裡:github.com/gslin/php-test-helpers,clone 下來後的安裝方法是:

phpize
./configure
make
make install

另外自己增加 extensions.ini

extension=test_helpers.so

主要是 PHP 內部的資料結構有變動,本來存取的方式要改掉。發了 pull request 但不知道作者會不會收,如果有需要的人可以自己先裝。

會用到 php-test-helpers 是因為寫 test case 的時候要換掉整個 HttpRequest,而 RunKit 不能換系統的 HttpRequest,所以找了不少 extension 發現 php-test-helpers 可以用。

換法是這樣:

set_new_overload(function($name){
    if ('HttpRequest' == $name) {
        return 'My_HttpRequest';
    }   
    return $name;
}); 

拿掉可以直接呼叫 unset_new_overload(); 整個拔乾淨...

PHP 5.4

PHP 5.4 前幾天正式釋出了:「PHP 5.4.0 released!」,新增與改變了很多東西。

有些蠻值得注意的地方:

  • safe mode 與 magic quote 都消失了,升級後需要重新檢查 php.ini
  • array_combine(array(), array()) 不再傳回 FALSE 了,總算是傳回 array()
  • 可以用 [] 表示 array() 了。
  • function 傳回 array 後可以直接對 array 取值,也就是 foo()[0] 變合法語法了。
  • new 完後可以直接 call function 了,也就是 (new Foo)->bar() 變合法語法了。
  • 內建 web server。

另外記憶體使用量以及效能都有巨大的改善,尤其是對物件的 method 效能改善很多,這對 framework 是好消息。

不過應該還是等 5.4.1 之後再用吧,剛出來的這幾個版本應該有不少人會踩到地雷需要修正...

PHP 提供的資料結構...

從「How big are PHP arrays (and values) really? (Hint: BIG!)」這篇看到的。文章本身值得花些時間看過了解,不過對我來說重點在最後面的 SplFixedArray

PHPDatastructures 說明目前 PHP SPL 所支援的 data structure,在記憶體用量以及效率上面都會比自己實作來的小且快。

可以看到很多都支援 Countable、Iterator,以及 ArrayAccess,代表可以用 foreach() 或是對應的方式存取... 如果自己寫 library 的時候應該要善用這些 SPL。

PHP 5.3 的 anonymous function

在看到 PHPConf Taiwan 2011 的議程介紹後,看到有人在推薦 Slim Framework,一連上去就看到包含 anonymous function 的 sample code:

<?php
require 'Slim/Slim.php';
$app = new Slim();
$app->get('/hello/:name', function ($name) {
    echo "Hello, $name!";
});
$app->run();
?>

然後回頭去翻 PHP 的說明:「Anonymous functions」,發現是從 PHP 5.3 開始支援。

於是在 JavaScript 上常用到的技巧就也可以在 PHP 上用了:(不影響到全域變數與函數空間的方式)

// JavaScript
(function(){
    // ...
})();

// PHP
call_user_func(function(){
    // ...
});

接下來是繼續測試 Slim Framework 了,看起來算是一個不錯的小東西... 之後拿來配合 Heroku 這類的 PasS 快速開發應該會很好用 :o