Использование переменной для динамической загрузки класса - PullRequest
3 голосов
/ 15 января 2010

Я решил использовать шаблон Singleton для своего приложения.Это имеет смысл для меня.Однако, как только я чувствую, что достиг некоторого прогресса, я сталкиваюсь с другой стеной.

У меня есть функция загрузки.Функция загрузки выполняет следующие действия.

Проверьте, был ли класс загружен ранее.- если так - вернуть $ class :: get_instance ();- В противном случае - искать класс в разных местах - если найдено - return $ class :: get_instance ();- иначе возвращаем ошибку.

До принятия шаблона Singleton я создавал экземпляры классов с классом нагрузки.

В контроллере это было бы так.Затем класс найдет файл и вернет ..

return new $class_name;

Я надеялся, что при изменении метода загрузки классов это будет изменено на несколько строк, но эти изменения вызывают синтаксические ошибки.

return $class_name::get_instance();

Можно ли написать строку выше без синтаксической ошибки?

Ответы [ 2 ]

4 голосов
/ 15 января 2010

Как насчет использования call_user_func?

return call_user_func(array($class_name, "get_instance"));

http://www.php.net/manual/en/function.call-user-func.php

1 голос
/ 15 января 2010

Попробуйте call_user_func()

call_user_func(array($classname, 'getInstance'));
call_user_func($classname .'::getInstance'); // As of 5.2.3

Кроме того, если вы хотите создать менеджер классов, который будет обрабатывать создание произвольных объектов, взгляните на Компоненты внедрения зависимостей Symfony , а также на эту очень простую для понимания презентацию на SlideShare о внедрении зависимостей с PHP в целом.

...