Non so perché, ma non mi piace utilizzando l'operatore new nel mio codice.
Ecco una funzione statica per creare un'istanza di una classe chiamata staticamente.
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
}
}
Se si utilizza dentro uno spazio dei nomi è necessario sfuggire ReflectionClass in questo modo: nuove ReflectionClass \ ...
Ora è possibile chiamare il metodo init() con un numero variabile di argomenti ed è lo passerà al costruttore e restituirà un oggetto per te.
modo normale utilizzando il nuovo
$obj = new ClassName('arg1', 'arg2', 'arg3');
echo $obj->method1()->method2();
modo in linea con nuova
echo (new ClassName('arg1', 'arg2', 'arg3'))->method1()->method2();
chiamata statico tramite init invece di nuovo
echo ClassName::init('arg1', 'arg2', 'arg3')->method1()->method2();
chiamata statico utilizzando initArray invece di nuovo
echo ClassName::initArray(['arg1', 'arg2', 'arg3'])->method1()->method2();
La cosa bella di metodi statici è che è possibile eseguire alcune operazioni di costruzione pre nei metodi init come la convalida argomento del costruttore.
riflessione mi viene in mente – Esailija