今までのPHPのやり方を全て打ち捨てよう
PHPは日々進化している
最重要な言語仕様の変更点
PHP 5.3.x
PHP 5.4.x
- trait
- ビルドインサーバ
- クロージャで$this
PHP 5.5.x
- ジェネレーター
Composer
PHPにとってのBundler
PEARの環境依存やめよう
PECL?知らん
PSR-4
includeやrequireをもう使う必要はない
PSR-4の規約にそって名前空間とディレクトリを掘ろう
そしてcomposer.jsonにちょいちょいと
{
"autoload": {
"psr-4": {
"mynamespace\\": "src/"
}
}
}
require_once 'vendor/autoload.php';
これだけで後はuseをjavaのimportに相当するものとしてパッケージ依存を解決できる
フレームワーク
もういらない
PHP 5.4以上ならAuraを使おう
ActiveRecordパターン辞めよう
ドメインモデルに永続化の機能が入ってると後々厄介だ
PDO使ってDataMapperパターンを自力で構築すべき
面倒なら
$php composer.phar require aura/sql
$php composer.phar require aura/sql-query
いっそ自分でフレームワーク構築したらよい
Auraは各コンポーネントが独立している
好きなの使って自力で組み立てろ
面倒なら
$php composer.phar create-project aura/web-project project_name
開発のためだけにLAMPPを構築する必要もない(当然phpのインストールだけは必要だが)
ビルドインサーバいい
$cat web/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [L]
</IfModule>
$php -S localhost:8888 -t web/
とか
$php -S localhost:88888 bootstrap.php
とか
データベース?PDOでsqlite使っときゃいいじゃん
本番環境でMysqlに移行できるようにしとけばよい
Dependency Injection
重要
Aurynがオススメ
$php composer.phar require rdlowrey/auryn
設定ファイルでInjectorを設定してやりゃいい
PDOの設定も Smartyの設定も 全部こいつがやってくれる
一例
$provider->alias('Aura\Sql\ExtendedPdoInterface', 'Aura\Sql\ExtendedPdo');
$provider->define('Aura\Sql\ExtendedPdo', [':dsn' => 'sqlite:' . dirname(__DIR__) . '/tmp/db']);
class DBController
{
public function __construct(\Aura\Sql\ExtendedPdoInterface $pdo)
{
$this->pdo = $pdo;
}
}
$controller = $provider->make('DBController');
// $pdoのインスタンスを自動で作ってコンストラクタの引数に渡してくれる
超強力
次回があれば実用例を紹介する
とりあえず入れておこうライブラリ決定版
- PhpOption
- PhpCollections
- PhpTry