PHP5.3

せっかく、内製フレームワークではなくOSSフレームワークを利用するということで、最新のPHP5.3 も少し勉強してみたいと思います。

しばらく、PHP4でも動作する環境に馴染んでいたせいか最新の動向がさっぱりわかりません。取り敢えずWEB+DB PRESS vol.59を中心に読み進めようと思います。感想についてはあくまで個人的なものです。明確なメリットを理解してないのかもしれません。

名前空間

<?php
namespace MyClass
class Directory {
	...
}
$dir = new MyClass\Directory;
目的
クラス名の衝突を避けるため
感想
単に混乱を避けたいのなら、長ったらしいクラス名でいいと思いました。あと、バックスラッシュを区切り文字にするのもなんか気持ち悪いですね。今後フレームワークで提供されているものを利用するときには使うかもしれません。それ以外のオリジナルのクラスはアプリの略称をプレフィックスに_クラス名という感じになろうかと。例)MyApp_File など

無名関数(クロージャ

<?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個も出てきます。使うのが目的にならないように注意したいですね。「必要は発明の母」といいますので、必要性を感じるまでは、問題ないのかもしれませんね。