読者です 読者をやめる 読者になる 読者になる

ところで、PHPってクラスの外で宣言した関数ってどこの名前空間に属するのか良くわからんのですが。

ioAlbumList.php

<?php
class ioAlbumList extends ioDataAccessBase
{
    public function selectRowset($option)
    {
        $rowset = $this->selectRowSetSimple($option);

        switch ($option->getOrder()) {
            case 'title':
                usort($rowset, 'compare_title');
                break;
            case 'author':
                usort($rowset, 'compare_author');
                break;
        }

        return $rowset;
    }
}

function compare_title($a, $b)
{
    return strcmp($a['title'], $b['title']);
}

function compare_author($a, $b)
{
    return strcmp($a['author'], $b['author']);
}

[EOF]

と言うファイルがあったとき、比較関数のcompare_titleとcompare_authorってどこの名前空間に所属するのかと。
もっと言うと、オーバーライドができない以上、比較関数名をシステム全体通してユニークな名前で定義する必要があるのか、ファイルの中だけでユニークであれば良いのか、というのが最終的なアレです。
一応、名前空間の定義もあるみたいですが、こういうケースで名前空間を定義しようとするとクラス宣言の「前に」しか定義をかけず、そうすると比較関数だけじゃなくクラスごと名前空間に入ってしまうのでまた使いづらい可能性が。

じゃあ、比較関数とクラスが別の名前空間として宣言できたとして、usort関数の引数に自分とは別の名前空間の指定ができるのか、というのもかなり怪しい話なんですケド。