2011-09-11 24 views
11

Comenzaré diciendo que sé cómo funcionan las interfaces PHP y cómo "usarlas".Interfaces PHP: ¿Cómo se pueden usar en la práctica?

Mi pregunta es más bien; ¿Cómo se vuelven útiles en las aplicaciones de la vida real?

He estado escribiendo PHP durante más de 3 años y nunca he sentido que necesite para una interfaz. Estoy escribiendo interfaces más para buenas prácticas que para un propósito particular.

+0

Dado que PHP no tiene una verificación de tipo estricta y más bien utiliza un formulario pato de tipeo, estoy de acuerdo. Sin embargo, creo que usar interfaces ayuda a comprender tu código. –

+0

@Micheal Mior: PHP conoce las sugerencias de tipo: 'function foo (BarClass $ x) {echo $ x-> hello; } ' – KingCrunch

+0

@KingCrunch Sí, pero no es a prueba de tontos. – GolezTrol

Respuesta

12

Proporcionaré un ejemplo en el que he utilizado interfaces en mi propia experiencia en el mundo real.

Las interfaces son extremadamente útiles cuando necesita definir algo así como una arquitectura de complemento. Supongamos que su aplicación acepta complementos de autenticación, lo que permite que los implementadores de su usuario final se integren con sus propias infraestructuras internas de autenticación (LDAP, Shibboleth, alguna base de datos de autenticación personalizada, lo que sea). Para que un plugin para ser compatible, debe implementar los métodos siguientes:

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

Si se define en una interfaz, una clase luego implementa la interfaz asegurar que los métodos necesarios están presentes para la compatibilidad con la arquitectura plugin.

Desafortunadamente, PHP no impone el tipo de retorno de los métodos de interfaz, por lo que debe simplemente tener cuidado de documentar la funcionalidad de retorno esperada de sus métodos.

2

No son tan útiles, todavía. Su objetivo principal parece ser el tipo de insinuación. Cuando escribe dos clases separadas que implementan la misma interfaz, puede usar esa interfaz en la sugerencia de tipo para una función. De esta forma, sabrá que tiene todos los métodos de esa interfaz disponibles en el objeto que se pasa en el parámetro.

Desafortunadamente, PHP no comprueba realmente si alguno de los métodos o propiedades llamados que llama en ese parámetro están realmente en esa interfaz, por lo que puede usar accidentalmente una propiedad de objeto que no está disponible en la interfaz, causando posibles errores cuando objeto de un tipo diferente se pasa.

Otros idiomas son mucho más estrictos en esta situación y solo le permitirán usar solo la funcionalidad declarada en la interfaz.

Sin embargo, también son convenientes para este propósito en PHP, y quizás estas verificaciones se vuelvan más estrictas en futuras versiones, por lo que se vuelve menos propenso a errores.

Cuestiones relacionadas