<?php
final class Subject
{
private function __construct() {}
public static function getFactory()
{
return new Factory(function() {
new Subject();
});
}
}
final class Factory
{
private $callback;
public function __construct(Closure $callback)
{
$this->callback = $callback;
}
public function getProduct()
{
return call_user_func($this->callback);
}
}
$factory = Subject::getFactory();
$subject = $factory->getProduct();