Если вы используете eval, ваше решение неверно.
Почему ваша не-версия не работает? Что не так? Что такое полное и полное сообщение об ошибке?
Пользовательская версия get_called_class
выполняет обратную трассировку и пытается открыть файл вызывающего, чтобы определить имя класса. Причина сбоя eval в том, что обратная трассировка eval не содержит имени файла.
(Редактировать: Кроме того, get_called_class
взлом - это очень взлом. Есть ли причина, по которой вы не можете использовать 5.3?)
Вы пытались использовать call_user_func ? call_user_func(array($ac, 'find'), 'all')
должен вызвать статический метод find
для имени класса, содержащегося в $ac
с параметром 'all'
. См. Также псевдотип обратного вызова и конкретный пример «Тип 2»