2011-09-11 12 views
11

Inizierò col dire che so come funzionano le interfacce PHP e come "usarle".Interfacce PHP: come sono utilizzabili nella pratica?

La mia domanda è piuttosto; come diventano utili nelle applicazioni della vita reale?

Scrivo in PHP da più di 3 anni e non ho mai sentito lo necessario per un'interfaccia. Sto scrivendo interfacce più per le buone pratiche che per uno scopo particolare.

+0

Dato che PHP non ha un rigoroso controllo di tipo e utilizza piuttosto una digitazione anatra, sono d'accordo. Penso che l'uso delle interfacce aiuti a comprendere il tuo codice comunque. –

+0

@Micheal Mior: PHP conosce il tipo di suggerimento: 'function foo (BarClass $ x) {echo $ x-> ciao; } ' – KingCrunch

+0

@KingCrunch Lo fa, ma non è infallibile. – GolezTrol

risposta

12

Fornirò un esempio in cui ho utilizzato le interfacce nella mia esperienza del mondo reale.

Le interfacce sono estremamente utili quando è necessario definire qualcosa come un'architettura di plugin. Supponiamo che la tua applicazione accetti i plugin di autenticazione, consentendo ai tuoi implementatori di utenti finali di integrarsi con le loro proprie infrastrutture di autenticazione interne (LDAP, Shibboleth, alcuni database di autenticazione personalizzati, qualsiasi cosa). Affinché un plugin per essere compatibili, deve implementare i metodi seguenti:

validate_user() 
start_user_session() 
logout_user() 
get_user_details() 

Se definito in un'interfaccia, una classe implementa poi l'interfaccia garantire che i metodi necessari sono presenti per compatibilità con l'architettura plugin.

Sfortunatamente, PHP non applica il tipo di restituzione dei metodi di interfaccia, quindi è sufficiente fare attenzione a documentare la funzionalità di restituzione prevista dei metodi.

2

Non sono così utili - ancora. Il loro scopo principale sembra essere quello di suggerire il tipo. Quando si scrivono due classi separate che implementano la stessa interfaccia, è possibile utilizzare tale interfaccia nel suggerimento tipo per una funzione. In questo modo, sai di avere tutti i metodi di quell'interfaccia disponibili nell'oggetto passato nel parametro.

Sfortunatamente, PHP in realtà non controlla se i metodi o le proprietà chiamate che chiamate su quel parametro sono effettivamente in quell'interfaccia, quindi è possibile utilizzare accidentalmente una proprietà dell'oggetto che non è disponibile nell'interfaccia, causando potenziali bug quando un oggetto di un diverso tipo è passato.

Altre lingue sono molto più rigide in questa situazione e consentiranno solo di utilizzare solo quella funzionalità dichiarata nell'interfaccia.

Tuttavia, sono convenienti anche per questo scopo in PHP, e forse questi controlli diventeranno più rigidi nelle versioni future, quindi diventa meno incline agli errori.

Problemi correlati