Что может быть лучшим способом гарантировать, что только один определенный класс может создавать экземпляры другого определенного класса в PHP без чего-то вроде вложенных классов? Есть ли шаблон или я вынужден использовать Reflection API?
Пример: только объект / класс A может создавать объекты класса B.
Вы можете проверить звонящего с помощью debug_bugtrace ()
class Foo
{
public function __construct()
{
$bar = new Bar();
$bar->test();
}
}
class Bar
{
public function test()
{
$trace = debug_backtrace();
if (isset($trace[1])) {
// $trace[0] is ourself
// $trace[1] is our caller
// and so on...
var_dump($trace[1]);
echo "called by {$trace[1]['class']} :: {$trace[1]['function']}";
}
}
}
$foo = new Foo();
Этот пример печатает called by Foo :: __construct
Затем вы можете проверить имя вызывающего абонента и отказать в заявлении, когда вызывающий не тот
Других решений пока нет …