今までのPHPのやり方を全て打ち捨てよう

PHPは日々進化している

最重要な言語仕様の変更点

PHP 5.3.x

PHP 5.4.x

PHP 5.5.x

  • ジェネレーター

Composer

PHPにとってのBundler

PEARの環境依存やめよう

PECL?知らん

PSR-4

includeやrequireをもう使う必要はない

PSR-4の規約にそって名前空間とディレクトリを掘ろう

そしてcomposer.jsonにちょいちょいと

{
    "autoload": {
        "psr-4": {
            "mynamespace\\": "src/"
        }
    }
}

そしてbootstrapに相当するphpスクリプト

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

絶対参照すべき

参照すべき