名前空間云々は置いといて、usortの別な書き方。
1.比較関数としてクラスのstaticメソッドを指定する
<?php class ioAlbumList extends ioDataAccessBase { public function selectRowset($option) { $rowset = $this->selectRowSetSimple($option); switch ($option->getOrder()) { case 'title': usort($rowset, array('ioAlbumList', 'compare_title')); break; case 'author': usort($rowset, array('ioAlbumList', 'compare_author')); break; } return $rowset; } public static function compare_title($a, $b) { return strcmp($a['title'], $b['title']); } public static function compare_author($a, $b) { return strcmp($a['author'], $b['author']); } } [EOF]
2.インスタンスメソッドを使うこともできる、らしい?
<?php class ioAlbumList extends ioDataAccessBase { public function selectRowset($option) { $rowset = $this->selectRowSetSimple($option); switch ($option->getOrder()) { case 'title': usort($rowset, array($this, 'compare_title')); break; case 'author': usort($rowset, array($this, 'compare_author')); break; } return $rowset; } public function compare_title($a, $b) { return strcmp($a['title'], $b['title']); } public function compare_author($a, $b) { return strcmp($a['author'], $b['author']); } } [EOF]
3.比較関数を無名関数としてusortに渡す
<?php class ioAlbumList extends ioDataAccessBase { public function selectRowset($option) { $rowset = $this->selectRowSetSimple($option); switch ($option->getOrder()) { case 'title': usort($rowset, function ($a, $b) { return strcmp($a['title'], $b['title']); }); break; case 'author': usort($rowset, function ($a, $b) { return strcmp($a['author'], $b['author']); }); break; } return $rowset; } } [EOF]
単純な比較なら3.でいいけど、キー1・キー2・キー3とソートキーが増えた場合は、無名関数とswitch文で組むとメソッドがだらだらと長くなるので2.パターンだな。
もしくは、ソート処理だけstaticで詰め込んだソートユーティリティクラスを作って1.の呼び出し方をするとか。まぁ、それは複数クラスから同じソート処理を頻繁に使う様なら、という感じかな。