No sé por qué, pero que no me gusta usar el nuevo operador en mi código.
Aquí hay una función estática para crear una instancia de una clase llamada estáticamente.
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
}
}
Si lo están utilizando dentro de un espacio de nombres que necesita para escapar ReflectionClass así: nuevos ReflectionClass \ ...
Ahora se puede llamar al método init() con un número variable de argumentos y se lo pasará al constructor y devolverá un objeto para usted.
manera normal utilizando las nuevas
$obj = new ClassName('arg1', 'arg2', 'arg3');
echo $obj->method1()->method2();
forma en línea utilizando las nuevas
echo (new ClassName('arg1', 'arg2', 'arg3'))->method1()->method2();
llamada estática con init en lugar de nueva
echo ClassName::init('arg1', 'arg2', 'arg3')->method1()->method2();
llamada estática con initArray vez de nuevo
echo ClassName::initArray(['arg1', 'arg2', 'arg3'])->method1()->method2();
Lo bueno de los métodos estáticos es que se puede ejecutar algunas operaciones de pre construcción en los métodos de arranque como la validación argumento del constructor.
reflexión viene a la mente – Esailija