Сейчас реализовываю подобный читаемый код для класса, хотел реализовать текучий интерфейс, избавиться от объявления new ClassName; и нашел подобный код и собрал у себя в классе:
class MyClass {
private $data = [];
private static $instance;
public function __construct(array $config = []) {}
public static function init(array $config = [])
{
if(!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c($config);
}
return self::$instance;
}
public function get()
{
return $this;
}
public function toJson()
{
echo json_encode($this->data);
}
}
и далее я могу вызывать класс с опциями так:
$myclass = new MyClass(['id' => 123]);
$myclass->get()->toJson();
или одной строчкой
MyClass::init(['id' => 123])->get()->toJson();