Eligijus
¿Dónde puedo usar y debo usar clases anónimas que se presentan en PHP 7? No puedo encontrar un caso de uso para ellos.
$message = (new class() implements Message {
public function getText() { return "Message"; }});
marcosh
Puedes encontrar la información que buscas aquídonde se presenta el RFC.
Los puntos clave del apartado “Casos de uso” son los siguientes:
- Burlarse de las pruebas se vuelve tan fácil como un pastel. Cree implementaciones sobre la marcha para interfaces, evitando el uso de API de simulación complejas.
- Mantener el uso de estas clases fuera del alcance en el que están definidas
- Evite presionar el cargador automático para implementaciones triviales
También encontré esto útil al escribir pruebas unitarias para rasgos para que pueda probar solo el método de rasgos, es decir:
trait MyTrait
{
public method foo(): string
{
return 'foo';
}
}
...
public function setUp(): void
{
$this->testObject = (new class() {
use MyTrait;
});
}
public function testFoo(): void
{
$this->assertEquals('foo', $this->testObject->foo());
}
MAChitgarha
Como dijo Rasmus Lerdorf en WeAreDevelopers ver sitio webcuando hablaba de las nuevas características de PHP7:
(Míralo en Youtube)
Clases anónimas, al igual que funciones anónimas; Básicamente, puedes acelerar las clases sobre la marcha y desecharlas. Personalmente, nunca he tenido un uso para esto, pero hay gente de framework que dice que esto es importante. Todavía tengo algunas dudas, pero fue fácil de implementar; y personas más inteligentes que yo han dicho “¡Sí, sí, es útil”! ¡OK!
Editar
Teniendo en cuenta la cita anterior del Sr. Lerdorf, las clases anónimas no significan que sean realmente inútiles.
Como ejemplo, es bueno para algún tipo de patrones Singleton, al definir e instanciar la clase al mismo tiempo.
O bien, otro ejemplo es implementar clases anidadas con eso. Si es posible. Para más detalles, vea mi respuesta aquí.
Un buen caso que puedo proporcionar es proporcionar un oyente específico del contexto para usarlo solo una vez o un adaptador para un oyente externo, sin definir una clase personalizada. Aquí hay un ejemplo:
$this-apiCaller->call('api_name', $parameters, new class($businessListener) implements ApiListenerInterface
{
private $listener;
public function __construct($originalListener)
{
$this->listener = $originalListener;
}
public function onSuccess($result)
{
$this->listener->addLog(new SuccessRecord($result));
}
public function onFailure($error)
{
$this->listener->addLog(new ErrorRecord($error));
}
});
Las clases anónimas no son diferentes de las clases regulares en PHP, excepto que deben crearse e instanciarse al mismo tiempo. Eso significa que pueden extenderse desde otras clases, pueden usar interfaces, etc.
Si cree que necesita una clase muy simple y nunca más la usará en ningún otro lugar, es adecuada para usted. Otra razón podría ser que necesita una clase simple (con múltiples métodos simples) y no desea perder tiempo en la documentación, por lo que crea una sobre la marcha para lograr su tarea.
clases anónimas (llamadas clases internas en Java) han existido durante bastante tiempo y puedes leer sobre ellos en muchos lugares. Te recomiendo que vuelvas aquí cuando tengas una pregunta más específica.
– morfático
15 de julio de 2015 a las 15:44
@morphatic Una clase interna es diferente a una clase anónima.
– usuario3629714
25/07/2015 a las 21:20