Nie wiem dlaczego, ale nie lubię za pomocą nowego operatora w moim kodu.
Oto statyczna funkcja do utworzenia instancji klasy o nazwie statycznie.
class ClassName {
public static function init(){
return (new ReflectionClass(get_called_class()))->newInstanceArgs(func_get_args());
}
public static function initArray($array=[]){
return (new ReflectionClass(get_called_class()))->newInstanceArgs($array);
}
public function __construct($arg1, $arg2, $arg3){
///construction code
}
}
Jeśli używasz go wewnątrz przestrzeni nazw trzeba uciec ReflectionClass tak: new \ ReflectionClass ...
Teraz można wywołać metodę init() ze zmienną liczbą argumentów i to przekaże go do konstruktora i zwróci obiekt dla ciebie.
normalny sposób przy użyciu nowego
$obj = new ClassName('arg1', 'arg2', 'arg3');
echo $obj->method1()->method2();
Inline sposób za pomocą nowego
echo (new ClassName('arg1', 'arg2', 'arg3'))->method1()->method2();
Static połączenia korzystając z Init zamiast nowego
echo ClassName::init('arg1', 'arg2', 'arg3')->method1()->method2();
Static połączenia za pomocą initArray zamiast nowego
echo ClassName::initArray(['arg1', 'arg2', 'arg3'])->method1()->method2();
Zaletą metod statycznych jest to, że można uruchomić kilka wstępnych prac budowlanych w metodach startowych takich jak walidacji argument konstruktora.
refleksja przychodzi na myśl – Esailija