PHPの有名どころライブラリ群メモ

# PHPの有名どころライブラリ群メモ


# PSR実装

## PSR-3 Logger

- [monolog](https://packagist.org/packages/monolog/monolog)
  - 最古のPSR-3実装。とりあえずこれを使っておけば問題ない
  - Symfony2で採用された

## PSR-7 Http Message

- [laminas/laminas-diactoros](https://packagist.org/packages/zendframework/zend-diactoros)
  - 昔は [zendframework/zend-diactoros](https://packagist.org/packages/zendframework/zend-diactoros) だった
- [guzzlehttp/psr7](https://packagist.org/packages/guzzlehttp/psr7)
  - HTTPクライアントとしてguzzleを使う機会は多い
- [slim/psr7](https://packagist.org/packages/slim/psr7)
- [nyholm/psr7](https://packagist.org/packages/nyholm/psr7)
- [relay/relay](https://packagist.org/packages/relay/relay)

## PSR-11 Container Interface

- [pimple/pimple](https://packagist.org/packages/pimple/pimple)
  - 古くからあるコンテナ
- [php-di/php-di](https://packagist.org/packages/php-di/php-di)
- [laminas/laminas-servicemanager](https://packagist.org/packages/laminas/laminas-servicemanager)
  - かつては [zendframework/zend-servicemanager](https://packagist.org/packages/zendframework/zend-servicemanager) だったもの
- [league/container](https://packagist.org/packages/league/container)
- [aura/di](https://packagist.org/packages/aura/di)
- [illuminate/container](https://packagist.org/packages/illuminate/container)
  - LaravelのDIコンテナ


## PSR-15 HTTP Handlers

- [league/route](https://packagist.org/packages/league/route)
- [northwoods/router](https://packagist.org/packages/northwoods/router)
- [sunrise/http-router](https://packagist.org/packages/sunrise/http-router)
- [middlewares/request-handler](https://packagist.org/packages/middlewares/request-handler)


## PSR-17 HTTP Factories
PSR-7,15,17 + PSR-11(Container Interface) を使うアーキテクチャなら、FactoryInterfaceをDIすればPSR-7実装の影響範囲は設定箇所だけになる。  
PSR-11を使わないアーキテクチャなら、PSR-7を自動判定(auto-discovery)してくれるライブラリを使うといい。

- PSR-17 HTTP-Factory with auto-discovery support
  - [tuupola/http-factory](https://packagist.org/packages/tuupola/http-factory)
  - [tebe/http-factory](https://packagist.org/packages/tebe/http-factory)


# ルーティング
PSR-15(HTTP Handlers) 準拠でないもの

- [symfony/routing](https://packagist.org/packages/symfony/routing)
- [nikic/fast-route](https://packagist.org/packages/nikic/fast-route)

# HTTP例外
例外だけ切り出したものは見つからなかった。  
ちょっと巨大すぎるので、例外部分のみを参考にするくらいがいいかもしれない。

- [symfony/http-kernel](https://packagist.org/packages/symfony/http-kernel)
  - `Exception/*`
- [slim4](slim/slim)
  - `Slim/Exception/*`

# CLI

- [symfony/console](https://packagist.org/packages/symfony/http-kernel)
  - 定番
- [pear/console_commandline](https://packagist.org/packages/pear/console_commandline)
  - とても古くからあるCLI引数のパーサ  
    よほどレガシなプロジェクトでない限り採用はなさそう

# DBAL + SQLビルダ

- [doctorine/dbal](https://packagist.org/packages/doctrine/dbal)
  - もっとも有名といえる
- [illuminate/database](https://packagist.org/packages/illuminate/database)
  - Laravelで採用されている

# SQLビルダ
DBALにクエリビルダも付いていることが多いので、古きこれらのライブラリを今から使う価値はあまり無さそう

- [Idiorm](https://packagist.org/packages/j4mie/idiorm)
- FluentPDO
  - 開発終了？

# ORM

- [doctrine/orm](https://packagist.org/packages/doctrine/orm)
  - もっとも有名といえる
- [eloquent](https://packagist.org/packages/illuminate/database)
  - Laravelで採用されている
- [cycle/orm](https://packagist.org/packages/cycle/orm)

# 日付時刻

- [carbon](https://packagist.org/packages/nesbot/carbon)
  - ver1系(php5用)はMutableなことに注意
- [chronos](https://packagist.org/packages/cakephp/chronos)
  - Immutableなのでphp-5.6なら採用してもいいかもしれない


# ユーティリティ

- [cakephp/utility](https://packagist.org/packages/cakephp/utility)
  - Hash が配列操作に便利
- [rappasoft/laravel-helpers](https://packagist.org/packages/rappasoft/laravel-helpers)
  - Laravel5 のヘルパ関数
- [myclabs/php-enum](https://packagist.org/packages/myclabs/php-enum)
  - phpでEnum(列挙型)を実現するライブラリ

# デバッグ

- [symfony/debug](https://packagist.org/packages/symfony/debug)
  - デバッグ画面

# 環境設定

- [vlucas/phpdotenv](https://packagist.org/packages/vlucas/phpdotenv)
  - phpで`.env`を扱うためのもの

# テンプレートエンジン

- [xiaoler/blade](https://packagist.org/packages/xiaoler/blade)
  - Laravelで採用されている `Blade` を単体で使うためのもの
  - phperには慣れ親しんだ構文で書けるのが特徴
- [twig](https://packagist.org/packages/twig/twig)
  - テンプレートエンジンはphpとは切り離されるべきという哲学
- [smarty3](https://packagist.org/packages/smarty/smarty)
  - 最古
- [league/plates](https://packagist.org/packages/league/plates)
  - 生php + α という感じ
- [phptal/phptal](https://packagist.org/packages/phptal/phptal)
  - HTMLの属性に埋め込むという変わったアプローチ


# framework

- [Laravel6](https://packagist.org/packages/laravel/framework)
  - 一番hot
- [Symfony5](https://packagist.org/packages/symfony/symfony)
  - php界にコンポネント指向を広めた偉大なframework、Symfony2の後継
  - 単体で使えるコンポネントもたくさんある
- [CakePHP4](https://packagist.org/packages/cakephp/cakephp)
  - 規約重視の哲学
  - CakePHP3あたりから徐々にコンポネント指向になってきた

- [phalcon](https://phalcon.io/)
  - php拡張でできているので高速

## microframework

- [Lumen](https://lumen.laravel.com/)
  - Laravelのmicroframework版という位置づけ
- [slim4](https://packagist.org/packages/slim/slim)
- [symfony/flex](https://symfony.com/doc/current/setup/flex.html)
  - Symfonyのmicroframework版という位置づけ
- [silex](https://packagist.org/packages/silex/silex)
  - 開発終了。以後は[symfony/flex](https://symfony.com/doc/current/setup/flex.html)を推奨されている。

- [mezzio/mezzio](https://packagist.org/packages/mezzio/mezzio)
  - PSR-15(HTTP Handlers) 対応のmicroframework
  - 昔は [zendframework/zend-expressive](https://packagist.org/packages/zendframework/zend-expressive) だったもの
  - PSR-7や15にいち早く対応してきた