2010-11-13 25 views
6

Duplicar posible:
What is the point of interfaces in PHP?¿Por qué debería crear interfaces en PHP?

¿Por qué hacerme interfaces en PHP?

Según tengo entendido, las interfaces están ahí para describir las clases que las implementan. Las clases deben contener al menos estas funciones. Esto está bien si está construyendo sobre el trabajo de otra persona, o tiene que mantener un cierto grado de compatibilidad. Pero en casos más simplistas?

Sé que para los lenguajes de programación compilados, como C++, el uso de interfaces permite un aumento en la velocidad de compilación, pero ¿qué pasa con PHP? Esta ventaja parece desaparecer, ya que PHP se interpreta, en lugar de compilarse.

+0

Solía ​​pensarlo así, pero PHP está compilado en bytecode, en realidad. Cuando ejecuta un script, lo primero que sucede es la compilación. Es por eso que puede usar cachés de bytecode como APC. – JAL

+0

Las interfaces se utilizan en lugar de la herencia múltiple. En PHP específicamente, también pueden proporcionar algunas características sintácticas sobre los objetos, ver clases SPL o ArrayAccces. – mario

+0

duplicado de [¿Cuál es el punto de las interfaces en PHP?] (Http://stackoverflow.com/questions/20463/what-is-the-point-of-interfaces-in-php) – Gordon

Respuesta

1

Quizás un ejemplo del mundo real ayude a ilustrar esto. Imagine que necesita construir una serie de clases de registro que graben mensajes en varios medios, como un archivo de texto, XML o una base de datos. Cada clase debe tener un código separado para interactuar con los diferentes tipos de almacenamiento, por supuesto. Sin embargo, si todos implementan la misma interfaz, la 'cara pública' que muestran a otro código es siempre la misma. De esta forma, otros códigos que usan objetos de registro no necesitan saber de qué clase son instancias o qué es el medio de almacenamiento. Todo lo que necesitan saber es que todas las clases de registro, en virtud del hecho de que todas implementan la misma interfaz, comparten una API común. Esta puede ser una forma muy poderosa de trabajar. Puede crear una biblioteca de código que resuelva los problemas relacionados de diferentes maneras y simplemente "conectar y reproducir" estos en su código.

+0

Gracias! Esto lo hizo mucho más claro para mí. Aunque otras respuestas contienen mucha información adicional, esto es lo que me desconcertaba. –

1

Las interfaces son una forma de 'emular' la herencia múltiple. Una clase en PHP puede extender solo una clase principal, pero puede implementar cualquier cantidad de interfaces, lo que le permite crear objetos con muchos tipos diferentes.

1

Las interfaces se usan para extender/emular el comportamiento básico de PHP, como iteradores, acceso a arreglos, etc. Esto es lo más importante que las interfaces le dan ... es decir, no puede hacerlo de otra manera.

También puede utilizar las interfaces para hacer cumplir las comprobaciones de parámetros:

function foo(MyInterface $obj) 
{ 
} 

Aunque no son tan útiles como los controles de tiempo de compilación que ganaría en otro idioma (por ejemplo, C++), la comprobación de tiempo de ejecución puede todavía ser muy útil para minimizar errores.

Finalmente, las interfaces pueden simplificar un poco de lógica utilizando la función is_a o el operador instanceof. Simplemente puede verificar si el objeto "abstracto" implementa una determinada interfaz, y luego hacer algo en consecuencia.

+0

Su respuesta no es correcta. Emular/extender el comportamiento central de PHP ??? Las interfaces se utilizan para aplicar una API estándar entre las clases secundarias. Puede cambiar una clase diferente y no tendrá incompatibilidades si se implementa correctamente. –

+0

O eres ignorante o simplemente eres pedante. Por ejemplo, si desea que su objeto emule (amplíe, imite, actúe como, lo que prefiera) una matriz a través de la sintaxis de matriz '[]', debe implementar la interfaz ArrayAccess. No hay otra manera de hacerlo. Hay muchas otras interfaces integradas que proporcionan ganchos en la funcionalidad central de PHP. – Matthew

0

El uso de interfaces no tiene nada que ver con la velocidad y nunca lo hará. Pero tiene mucho que ver con el desacoplamiento y la abstracción.

Los utilizará en PHP:

  1. Para ocultar la aplicación - Establecer un protocolo de acceso a una clase de objetos de cambiar la implementación subyacente sin refactorización en todos los lugares que ha utilizado que los objetos
  2. para comprobar el tipo - como en asegurarse de que tiene un parámetro de un tipo específico $object instanceof MyInterface
  3. a hacer cumplir comprobación de parámetros en tiempo de ejecución - ver @konforce responder
  4. a implementar múltiples comportamientos en una sola clase (build tipos complejos implementa)

    clase Car EngineInterface, BodyInterface, SteeringInterface {

de modo que un objeto Car ca ahora start(), stop() (EngineInterface) o goRight(), goLeft() (interfaz de dirección)

y otra cosas que no puedo pensar en este momento

De Thinking in Java:

Una interfaz dice: "Esto es lo que parecerán todas las clases que implementan esta interfaz particular". Por lo tanto, cualquier código que use una interfaz particular sabe qué métodos se pueden llamar para esa interfaz, y eso es todo. Entonces la interfaz se usa para establecer un "protocolo" entre clases.