В настоящее время я работаю над проектом PHP, который включает в себя широкое использование базы данных. Основы таковы: у меня есть класс PDOFactory
, который следует шаблону Factory, и абстрактный класс SQL
со статическими методами (просто контейнер для этих методов), который, в свою очередь, обращается к PDOFactory
Как я уже сказал, проект предполагает интенсивное использование базы данных, поэтому класс SQL
будет содержать множество методов. Однако их можно легко сгруппировать, в зависимости от того, с чем они имеют дело (например, хранение сеанса, вход / выход пользователя из системы и т. Д.). Это сделало бы класс SQL намного проще в обслуживании и так далее. И тут возникает большой вопрос: могу ли я получить источник содержания класса , разбросанного по многим файлам? Может быть (по крайней мере) два возможных решения этой проблемы:
- Множественное наследование, то есть наличие классов
SQLSession
, SQLUser
, SQLblahblah
и заставить класс SQL
наследовать их всех.
- C ++ - как директивы препроцессора *, т.е.
#include SQLSession.php;
или что-то в этом роде.
Я знаю, что в PHP нет множественного наследования, так что исключается вариант № 1. Возможен ли вариант № 2? Или кто-нибудь знает о лучших решениях этой проблемы?
* Или на самом деле директивы препроцессора, поскольку PHP является препроцессором. :)
EDIT:
Вот попытка ответить на этот вопрос, основываясь на предложении Калиума. Это беспорядок читать, но это работает. Тем не менее, я буду придерживаться метода Билла, так как он чище.
class SQL {
private static $oInstance = false;
public static function getInstance()
{
if( self::$oInstance == false )
{
self::$oInstance = new self();
}
return self::$oInstance;
}
public $SESSION;
private function __construct()
{
$this->SESSION = new SESSION;
}
}
// this would be in another file
class SESSION {
public function printOne()
{
echo "One";
}
}
SQL::getInstance()->SESSION->printOne(); // outputs "One"
?>