2014-09-08 6 views
2

В настоящее время я создаю небольшой проект с PHP, не используя статические методы или глобальное состояние.Зависимость впрыска в php?

Конструкторы моего класса в настоящее время немного похожи на это, я просто вставляю зависимые объекты при создании экземпляра объекта.

class Something { 

    public function __construct(Name\Space\Object $object, Other\Name\Space $object2) 
    { 
     # Assign properties here 
    } 
} 

В одном из классов моего приложения мне нужно создавать новые экземпляры различных объектов посредством вызова его методов. Что-то немного похожее ниже;

class Something { 

    public function getNewObject() 
    { 
     return new Name\Space\Object(); 
    } 

    public function getNewObject2() 
    { 
     return new Name\Space\ObjectTwo(); 
    } 
} 

Это как это сделать, если придерживаться стандартного правила инъекции зависимостей?

Я не уверен, как это сделать, как если бы я ввел объект в конструктор, тогда у меня будет только один экземпляр, тогда как мне может понадобиться много в моем приложении?

Спасибо,

ответ

0

Я считаю, что функции являются объектами первого класса в PHP, так что это должно работать:

<?php 
class MyClass { 
    function foo() { 
    return 'foo'; 
    } 
}; 

class MyOtherClass { 
    function __construct($klass) { 
     $this->klass = $klass; 
    } 

    function get_instance() { 
    return new $this->klass(); 
    } 
} 

$factory = new MyOtherClass(MyClass); 
$obj  = $factory->get_instance(); 
?> 
// <h1> value should equal foo 
<h1><?php echo $obj->foo();?></h1> 

Edit: Протестировано и работает.

+1

Это выглядит круто, проведет испытание и сообщит вам, как я себя чувствую. Спасибо, это лучшее решение, чем мое. – SolarSync

+0

Это решение действительно работает, просто передайте имя класса в конструктор, и вы хороши. Вы также можете переназначить класс во время выполнения, собирая свойство $ klass. –

+0

Спасибо :) помог много – SolarSync

Смежные вопросы