[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Фабрика с единым пространством
WarGot
День добрый форумчане. Помогите решить проблему, пытаюсь реализовать фабрику, но что-то безуспешно.

Есть класс Core который наследуется от Сonstructor который дол

class Core extends Constructor{

}


В Constructor есть метод который подключает и вызывает классы синглентоны, включая их в состав Core

class Constructor{
protected function constructor($components){
foreach ($components as $component => $synonim){
include("libs/php/".$component.'.class.php');
$this->$synonim = $component::create();
}
}
}


Допустим передаю на constructor('Mysql', 'Domain'), получаю в Core в $this->Mysql синглентона мускула, в $this->Domain второй класс. Основная проблема заключается в невозможности использовать в классе Domain мускул соединения без костылей.

Существует ли возможность класс Core и два подключаемых класса (Mysql и Domain) получить в едином пространстве, чтобы из Domain был доступен функционал mysql, естественно соблюдая очерёдность подключения.
glock18
class Constructor{
protected function constructor


self-incapsulated конструктор? ауч...

Цитата (WarGot @ 24.06.2013 - 14:50)
Существует ли возможность класс Core и два подключаемых класса (Mysql и Domain) получить в едином пространстве, чтобы из Domain был доступен функционал mysql, естественно соблюдая очерёдность подключения.


ммм... если только формулировку поменять. Дружественных классов в пыхапе нет.
paul85
Цитата
ммм... если только формулировку поменять. Дружественных классов в пыхапе нет.


А разве через traits (начиная с версии 5.4) нельзя соорудить что-то вроде дружественных классов? Хотя это скорее мультинаследование...
OleKh
Может быть так?

core.php
include('constructor.php');

class core extends construct{}

$core = new core(array('mysql'=>'mysql', 'domain'=>'domain'));
domain::use_mysql(); //mysql Object ( )



constructor.php
class construct
{
public function __construct($components){
foreach ($components as $component => $synonim){
include($component.'Class.php');
$this->$synonim = $component::create();
}
}
}


domainClass.php
class domain
{
private static $test;
public static $mysql;

private function __construct(){}

public static function create (){
if(empty(self::$test)) {
self::$test = new domain();
}
self::$mysql = mysql::create(); // экземпляр класса mysql

return self::$test;
}

static function use_mysql (){
print_r(self::$mysql);
}

}


mysqlClass.php
class mysql
{
private static $instance;
private function __construct(){}

public static function create (){
if(empty(self::$instance)) {
self::$instance = new mysql();
}
return self::$instance;
}
}

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.