ひろかわ
ポスト5.3時代のコード
新機能
- モジュラーデザイン
- 名前空間
- オートローダー
統計上、PHP5.3を使っている人が一番多い
サーバーサイドのプログラミング言語はPHPが一番使われている(7割がた)
そして9割がたPHP5を使っている
6割がた5.2
更新する理由
- 新機能 性能が魅力的
- セキュリティ バグ修正
- サポート切れ
更新しない理由
- 更新 確認の手間
- 新機能 性能の魅力が小さい
- 周辺環境の更新が追いつかない
「開発リソースの有効活用」とサポートの両立が課題
04/7 5.0(エンジン強化 OOPの大幅なサポート)
06/11 5.2 メモリ 速度改善 入力フィルタ
09/6 5.3 名前空間 クロージャ GC改善 遅延静的束縛 など
10/3 6.0 キャンセル
12/3 5.4 Traits 速度改善 MB対応標準化 組み込みwebサーバ レガシー機能削除
コミュニティもだんだん広がってきている。
今年は5.3.9から 9/13時点で 5.3.17が最新
CGIクエリパラメータ脆弱性 などが多い
2012/3 ソースコードの管理をsubversionからgitに移行
git.php.net githubにミラー。 PHPソースをクローンしてPRして誰でも変更を行うことが出来る
RFC作成 → 議論、更新 → 投票
フレームワークと相互運用性
相互運用性
モジュラーデザインが可能なフレームワーク(予め仕組みを決めないと不具合が発生するから難しい)
5.3時代のフレームワーク
- Fuel
- symfony
- ZF2
PHP-FIG(PHP Framework Interoperability Group)
PSR(PHP Standards Recommendation)
PSR準拠にするには
PSR0-2準拠になるように修正など
依存性マネージャ
パッケージマネージャ(サーバ、システム単位からプロジェクト単位へ)
主要フレームワークに対応
- composer.jsonに依存性を記述
- パッケージのインストール
- オートローダとロックファイル自動生成
- 依存性を更新
Packagist::Composerによる配布 現在は3000くらい
Get Composed
PHP5.4改善/変更のポイント
- 速度改善
- Mix-inライクな機能を実現
- 古い機能の削除
- ZEマルチバイト標準化
- 組み込みwebサーバー など
PHP5.4で高速化と省メモリ化を少しずつ実現
- Trait: 単一継承の言語でコードを再利用する仕組み
- 実装の再利用を行える
- クラスや他のTraitのメソッド名衝突を解決する仕組みが必要
Zendエンジンマルチバイト対応標準化 バイナリ互換性改善
PHP <= 5.3
PHP 5.4
zend.multibyte = Onで有効に
zend.script_encodingでスクリプト文字コードを指定
正規表現置換eオプションはセキュリティホールとなりやすい
mb_ereg_replace_callback()関数追加で、置換文字列でコールバック関数を使用可能に
PCREにおけるpreg_replace_callback()に相当
5.5
- リリース時期は未定
- 5.3 5.4に比べて小幅な改訂となるかも
- 目玉機能は今のところGenerator
Generator
- イテレータを関数で定義(from Python)
- ファイルの各行を処理、ファイル全体読み込み→メモリが大量に必要
- イテレータ定義は多くのコード記述が必要なので、配列全体を返すのではなく、値を生成するイテレータを返す
finallyキーワード
- finallyブロック tryブロックから出る際に常に実行される
- 例外処理の有無によらない → クリンナップコードを記述
パスワードハッシュ
- パスワードハッシュ用API
- crypt関数のラッパー パスワードハッシュをより簡単に発行できるようになった。
その他
配列文字列の添字参照
echo "123"[1]; // 2 echo [1,2,3][2]; // 3
foreachでリスト代入が可能に
preg_replaceのeオプションは非推奨になる