2015-07-15 35 views
8

Dove posso utilizzare e dovrei usare classi anonime presentate in PHP 7? Non riesco a trovare un caso d'uso per loro.Classi anonime in PHP 7

$message = (new class() implements Message { 
public function getText() { return "Message"; }}); 
+1

classi anonime (chiamato [classi interne in Java] (https://www.google.com/webhp?ion=1&espv=2&es_th=1&ie=UTF-8#q=java% 20nerner% 20classes ed es_th = 1)) sono in circolazione da un po 'di tempo e [puoi leggerli in molti posti] (https://www.google.com/webhp?sourceid=ion=1&espv=2&es_th=1&ie=UTF- 8 # q = utilizzo + caso + per + anonimi + classi). Ti raccomando [torna qui quando hai una domanda più specifica] (http://stackoverflow.com/help/how-to-ask). – morphatic

+2

@morphatic Una classe interna è diversa da una classe anonima. – jvrodrigues

risposta

12

È possibile trovare le informazioni che state cercando here, in cui viene presentato il RFC.

I punti chiave della sezione Use cases sono i seguenti:

  • test beffardo diventa un gioco da ragazzi. Crea implementazioni "al volo" per interfacce, evitando l'uso di API di simulazione complessa.
  • mantenere l'utilizzo di queste classi di fuori del campo di applicazione sono definiti nella
  • evitare di colpire il caricatore automatico per le implementazioni banali
  • classi
0

anonimi non sono diverse da quelle lezioni regolari in PHP tranne che devono essere creati e un'istanza al allo stesso tempo. Significa che possono essere estesi da altre classi, possono utilizzare interfacce, ecc.

Se pensi di aver bisogno di una classe molto semplice e di non usarla mai più in nessun altro, è giusto per te. Un altro motivo potrebbe essere che hai bisogno di una classe semplice (con più metodi semplici) e non vuoi perdere tempo per la documentazione, quindi crearne una in movimento per raggiungere il tuo compito.

0

Un buon caso che posso fornire è fornire listener specifico per il contesto per usarlo solo una volta o un adattatore per listener esterno, senza definire una classe personalizzata. Ecco un esempio:

$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)); 
    } 
}); 
Problemi correlati