Symfony 團隊認為新版的 Symfony 4 的修改,已經能讓使用者有和 Silex 相同的使用者體驗,於是決定不再繼續維護 Silex:
http://symfony.com/blog/the-end-of-silex
目前 Silex 將在 6 月結束維護 (EOL, End Of Life):
軟體開發和生活瑣事
Symfony 團隊認為新版的 Symfony 4 的修改,已經能讓使用者有和 Silex 相同的使用者體驗,於是決定不再繼續維護 Silex:
http://symfony.com/blog/the-end-of-silex
目前 Silex 將在 6 月結束維護 (EOL, End Of Life):
我目前使用的 PHP APT 是「http://ppa.launchpad.net/ondrej/php/ubuntu」,不過看起來在 PHP 7.2 還沒有 xdebug 可以使用。
如果硬要使用 aptitude 安裝,只能裝到 PHP 7.1 的版本。
所以後來用 phpbrew 在硬幹,發現不能安裝是有原因的:目前 xdebug stable 版本只支援到 PHP 7.1,若要在 PHP 7.2 使用 xdebug,只能先安裝 dev 版本。
所以開發機可能考慮先降版本回到 7.1 吧。
進幾年 Laravel framework 竄紅,大家也趨之若騖,相對其他的 framework 就被冷落了,實在有點可惜。
Laravel 有其特色,但個人用了幾個版號,覺得 Laravel 比較適合中大型專案、以及快速開發,在往後維護和升級難度都不低 (5.1 migrate 到 5.4 根本是地獄)。
而如雨後春筍般冒出來的 Laravel library 很多又只能供 Laravel 使用,很難在其他 framework 上使用。Laravel 開發出來的元件耦合度也不低,很難拉出來供其他人使用 (Symfony 的各個元件都是 library,可以透過 composer require 供需要者使用)。結果讓想要使用其他 framework 的人找不到資源可以使用,少了很多選擇。
個人比較想看到的是,各種 framework 都能有社群協助一起發展,PSR 把一些好的設計制定成開發規範,大家遵守便能讓一個 library 在多個平台使用,而不是讓 Laravel 獨大,讓 PHP 的生態系變得單調、沒有選擇。
最近因公司需要而翻了近十個 framework、以及 CRM,並從中截長補短撰寫適合公司使用的 framework,希望以後有時間可以整理成公版讓其他有類似需求的人也來用看看。(本來想再愚人節發布的,似乎來不及了 TAT)
前陣子從 gslin 那邊看到 PHPStan 這個工具,剛好手上有需要測試的程式,就拿來掃一掃。常見的問題大多都可以抓到,甚至連 doc comment 有錯誤也會抓出來。
下面弄個個 demo code 讓大家稍微看一下實際狀況。
Hello.php:
<?php
namespace Zero;
class Hello
{
/**
* @param array $name
*/
public function greeting(): void
{
$test = '123';
echo "Hello $namen";
}
}
bootstrap.php:
<?php
require __DIR__ . '/../vendor/autoload.php';
$hello = new ZeroHello();
$hello->greeting(123);
然後執行 PHPStan 做 level 5 的分析:
------ ------------------------------------------------------
Line src/Hello.php
------ ------------------------------------------------------
10 PHPDoc tag @param references unknown parameter $name
14 Undefined variable: $name
------ ------------------------------------------------------
------ ---------------------------------------------------------------------
Line src/bootstrap.php
------ ---------------------------------------------------------------------
7 Method ZeroHello::greeting() invoked with 1 parameter, 0 required.
------ ---------------------------------------------------------------------
從 PHPStan 給的錯誤訊息,就可以在執行 PHP 之前預防錯誤發生。
不過有一些比較可惜的地方:
今天遇到很奇怪的行為,在 PostMan 將 HTTP POST data 丟給 PHP 以後,參數名稱裡面有 . (dot) 的字元,全部都被改為 _ (underscore) 了。像是 field 名稱為「article.title」的欄位名稱,在 PHP 底下取值必須使用 $_POST[‘article_title’]。
原本以為 RFC 裡面有的定義 reserve word,但是找了半天找不到。最後原因是 PHP 為了支援 register_global,但是 PHP 變數名稱又不允許使用 . (dot) 當作名稱的一部分,最後就自動轉為 _ (underscore)。
這個行為不管有沒有啟動 register_global 都會出現,即使上了 PHP 7.2 都已經不支援了,這個行為仍然存在。
ref:
後來做了個簡單的測試,在 HTTP POST 依序送出二個 field data:
a.b=100&a_b=200
這時候再印出 $_POST:
var_dump($_POST);
array(1) {
'a_b' =>
string(3) "200"
}
所以後面的會打贏前面的 … (所以「世界上的戰爭沒任何人贏了,只有戰爭贏了」)