PHP5.3
せっかく、内製フレームワークではなくOSSのフレームワークを利用するということで、最新のPHP5.3 も少し勉強してみたいと思います。
しばらく、PHP4でも動作する環境に馴染んでいたせいか最新の動向がさっぱりわかりません。取り敢えずWEB+DB PRESS vol.59を中心に読み進めようと思います。感想についてはあくまで個人的なものです。明確なメリットを理解してないのかもしれません。
名前空間
<?php namespace MyClass class Directory { ... } $dir = new MyClass\Directory;
無名関数(クロージャ)
<?php // 以前 $func = create_function( '$s', 'print(nl2br($s));' ); // 5.3以降 $func = function($v) { return nl2br($v); }; var_dump($func("hoge \n fuga"));
- 目的
- PHPの構文で記述できる。use で変数が引き継げる。戻り値がオブジェクトだ。
- 感想
- 元の記述が問題でしたので、是非使うべきでしょうね。
- 参考
- http://www.php.net/manual/ja/functions.anonymous.php
条件演算子
<?php // 以前 $file = get_file_list() ? get_file_list() : 'default'; // 5.3以降 $file = get_file_list() ?: 'default';
- 目的
- 戻り値をそのまま代入する場合に値を省略できる。
- 所見
- 確かに長ったらしい変数名だったり、2度同じ関数を呼び出すのは変なので便利。
マジックメソッド __callStatic(), __invoke() が追加
- __callStatic()
- 未定義のメソッドを静的呼び出しすると呼び出される。
<?php class MyClass { public static function __callStatic($name, $params) { echo 'Method: '.$name; var_dump($params); } }
- 所見
- どんな時に使うんでしょうね。
- __invoke()
- オブジェクトを関数のように使うと呼び出される。
<?php class MyClass { public function __invake() { ... } }
- 感想
- どんな時に使うんでしょうね。Singleton的な何かですかね?
SPL(Standard PHP Library)
PHPの標準的なライブラリ。仕様時は imprements 演算子を使って記述する。
- Countable
- count()をインタフェースとして持つ。デフォルトは1。
- ArrayAccess
- offsetExists(), offsetGet(), offsetSet(), offsetUnset()をもつ。パッと見通り。
- Serializable
- シリアライズ、アンシリアライズ。__sleep(), __wakeup() がどーのこーの。
- IteratorAggregate
- イテレータ
↓
上の4つを実装したのが、ArrayObject
<?php $array = array( 1, 2, 3, 'aa' => 'foo', 'bb' => 'bar' ); $arrayObjct = new ArrayObject($array); echo $arrayObjct['aa']; // 'foo' echo $arrayObject->count(); foreach ($arrayObjct as $key -> $value) { echo $key.':'.$value; }
- 感想
- 便利な配列クラスぐらいに覚えておけばいいですかね?
コンテナ
機能群。キュー、スタック、ヒープがどうのこうの。特定用途で高速かつメモリ効率が良い。
ファイル操作
やった!ファイルの操作ができる!どうでもいいわ!
オートロード
未定義のクラスやインタフェースを自動で呼び出してくれる。問題としてプログラム中に1度しか記述できない事や、実行時のオートロードの設定を変更するのが難しいなどが挙げられる。とのこと。じゃぁ使わんでよし。
全体的な感想
本当に小一時間本を見て回っただけですが、今回どんな用途で利用するものかを深く知った上で書いているわけではありません。ただ、PHP は大抵の場合何かをしようとすると解決方法が5個も10個も出てきます。使うのが目的にならないように注意したいですね。「必要は発明の母」といいますので、必要性を感じるまでは、問題ないのかもしれませんね。