рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓, рдореЙрдбреНрдпреВрд▓рд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╕рд┐рдореНрдлрдиреА рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕рдВрдЧрдарди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо
рд╕рдВрдЧреАрддрдХрд╛рд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП,
рдпрд╣рд╛рдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реА рдореЙрдбреНрдпреВрд▓рд░ рд╕рдВрд░рдЪрдирд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ
рдирд┐рдпрдВрддреНрд░рдг рдЙрд▓рдЯрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧреАред рд╣рдо
IoC рдХрдВрдЯреЗрдирд░реЛрдВ рдФрд░ рдЕрдкрдиреА рдЦреБрдж рдХреА
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЪрд▓реЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдмрдВрдзрди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ
рдореЙрдбреНрдпреВрд▓рд░ рдХрд╣рд╛ред
рдкрд╣рд▓реЗ рд╣рдо рд╕рдВрдЧреАрддрдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред
{ "name":"elfet/modular", "type":"library", "autoload": { "psr-0": { "Modular": "src/" } }, "require":{ "php":">=5.3.0", "elfet/ioc":"dev-master" } }
рдЕрдм рдЬрд╣рд╛рдВ рд╣рдо "рдореЙрдбреНрдпреВрд▓рд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╣рдо IoC рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗред
рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓рд░ рдкреНрд░рдгрд╛рд▓реА рдХреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧреА:
index.php - app/ app.ini - ModuleOne/ module.ini - ModuleTwo/
рд╣рдо рдлреНрд░рдВрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рдРрдк рдХреА рд╢реНрд░реЗрдгреА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
namespace Modular; use IoC\Container; use Composer\Autoload\ClassLoader;
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд▓реЛрдбрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
public function load($moduleName, $moduleClass, $moduleDir) {
рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ред
namespace Modular; use IoC\Container; use IoC\Assoc\Service; class Module { private $moduleDir;
рдЕрдм рдЖрдЗрдП рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдлрд┐рд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдПрдХ рдиреЛрдЯрдмреБрдХ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рд╕рд╛рд░рд╛ рдХреЛрдб
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдХрдВрдкреЛрдЬрд╝рд░ рдмрдирд╛рдПрдБред Json:
{ "require":{ "php":">=5.3.0", "elfet/modular":"dev-master" } }
рдФрд░ рдХрдВрдкреЛрдЬрд╝рд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдЪрд▓рд╛рдПрдВред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдВрдбрд░ / рдлреЛрд▓реНрдбрд░ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд░реВрд░рдд рд╣реИред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдиреЛрдЯрдкреИрдб / рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░ StorageInterface рд╕рдВрдЧреНрд░рд╣рдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ:
namespace Notepad; interface StorageInterface { public function set($key, $value); public function get($key); public function save(); public function load(); }
рдФрд░
FileStorage рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреАред
рдХреЛрдб namespace Notepad; use Notepad\StorageInterface; class FileStorage implements StorageInterface { protected $store = array(); protected $file; public function __construct($file = 'store.json') { $this->file = realpath(__DIR__ . '/../cache/' . $file); } public function set($key, $value) { $this->store[$key] = $value; } public function get($key) { return isset($this->store[$key]) ? $this->store[$key] : null; } public function save() { file_put_contents($this->file, json_encode($this->store)); } public function load() { $content = file_get_contents($this->file); $this->store = (array)json_decode($content); } }
рд╣рдо
рдореЙрдбреНрдпреВрд▓.рдЖрдИ рдореЗрдВ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ
рд╣реИрдВ :
[Notepad\FileStorage] interface = Notepad\StorageInterface file = store.json
рдЕрдм, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдиреЛрдЯрдкреИрдб \
рдирд┐рдпрдВрддреНрд░рдХ ) рдЬрд┐рд╕рдореЗрдВ рд╕реЗ StorageInterface рд╕рдореНтАНрдорд┐рд▓рд┐рдд рд╣реИ, рдХреЛ рдПрдХ FileStore рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛:
public function __construct(StorageInterface $storage)
рд╕рднреА рдиреЛрдЯрдкреИрдб рдХреЛрдб
рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз
рд╣реИ ред
рдЖрдЗрдП MyNotepad рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рдиреЛрдЯрдкреИрдб рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдм рд╣рдо DbStorage рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / MyNotepad / DbStorage.php рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / MyNotepad / рдореЙрдбреНрдпреВрд▓.in.in рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░реЗрдВ:
[MyNotepad\DbStorage] database = mystore.db
рдФрд░
app.ini рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝реЗрдВ
[Notepad] path = Notepad/ [MyNotepad] path = MyNotepad/
рдЕрдм, рдиреЛрдЯрдкреИрдб \ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╕рдордп MyNotepad \ DbStorage рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдмрд╕ рдЗрд╕реА рддрд░рд╣, рдиреЛрдЯрдкреИрдб рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛, рд╣рдордиреЗ рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ред
рдЧрд┐рддреБрдм рдкрд░, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдиреЛрдЯрдкреИрдб рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рдХреЛ рдХреИрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╢реЙрд░реНрдЯрдХрдЯ