Un modismo usado comúnmente en lenguajes orientados a objetos como Python y Ruby se instancias de un objeto y el encadenamiento de métodos que devuelven una referencia al objeto en sí mismo, tales como:Instanciación de clase "en línea" en PHP? (Para facilitar la método de encadenamiento)
s = User.new.login.get_db_data.get_session_data
En PHP, se es posible replicar este comportamiento como tan:
$u = new User();
$s = $u->login()->get_db_data()->get_session_data();
Intentar los siguientes resultados en syntax error, unexpected T_OBJECT_OPERATOR
:
$s = new User()->login()->get_db_data()->get_session_data();
Parece que esto podría lograrse usando métodos estáticos, que es probablemente lo que terminaré haciendo, pero quería comprobar el lazyweb: ¿Existe realmente una forma simple y clara de crear instancias de clases PHP "en línea" (como se muestra en el fragmento de arriba) para este propósito?
Si decido usar métodos estáticos, es demasiado mágico tener el método estático de una clase para devolver una instanciación de la clase en sí? (¿Escribir mi propio constructor-que-no-es-un-constructor efectivamente?) Se siente un poco sucio, pero si no hay demasiados efectos secundarios de miedo, podría hacerlo.
Supongo que también podría crear una instancia de UserFactory con un método get_user(), pero tengo curiosidad acerca de las soluciones a lo que pregunté anteriormente.
Desde PHP 5.4, funciona lo siguiente: '(new User()) -> login() -> ...', ver [PHP changelog] (http://php.net/ChangeLog-5.php) para 5.4 .0 * "Se agregó el acceso de miembro de clase en instanciación (por ejemplo, (nuevo foo) -> barra()) support "* – hakre