2010-12-10 21 views
6

Estoy haciendo una nueva clase en PHP. No anticipo que esta clase se haya extendido alguna vez. ¿Debería molestarme en hacer que los miembros de la clase sean privados e implementar las funciones getter y setter?¿Debo molestarme con getters y setters en PHP?

Parte de mí piensa que esto es solo una gran pérdida de tiempo y solo sirve para aumentar mi código.

La clase es para un currículum. Lo escribo en código para demostrar mi estilo de codificación. La pregunta es si un empleador desea ver captadores y establecedores, o eso solo complicará las cosas?

+1

¿Puede darnos cierta información acerca de su clase? – RDL

+0

Es para un currículum. Lo estoy escribiendo en código. La pregunta es si un empleador desea ver captadores y establecedores, o eso solo complicará las cosas? – james

+1

que hace una gran diferencia en cómo responder a su pregunta; Es posible que desee editar su pregunta para agregar esa información. –

Respuesta

2

No me molestaría si fuera tú. Tienes razón, esa decoración simplemente desordenaría tu clase.

1

¿Quieres hacer algo especial en el set o conseguir (o solo uno de ellos en privado)?

Si no es así, no pierda su tiempo en estos.

No se gana nada sobre cómo hacer esto si no se utilicen de una manera "especial" y tal vez es incluso ralentizar todo abajo

+1

Puede ganar con eso si necesita hacer algo especial sobre los valores en el futuro. –

3

Es posible que nunca sepa que no necesitará extender la clase en el futuro. ¿Qué estará haciendo la clase? ¿Qué tan complejo es?

La encapsulación es parte del buen diseño OO. Pero un buen diseño de OO no es el objetivo de la programación. El objetivo es que las cosas funcionen y poder modificarlas fácilmente cuando sea necesario.

0

Si no planea tener un comportamiento específico al configurar o acceder a esas propiedades, no importa mucho.

Si tiene que tener un comportamiento específico al acceder o modificar esas propiedades más adelante, siempre puede sobrecargar el método __set y __get.

Ver: http://php.net/manual/en/language.oop5.overloading.php

+0

Los métodos mágicos son lentos. Estos no son reemplazos para getters y setters adecuados. – Gordon

2

me gusta hacer las propiedades de mi clase protegida o privada y luego utilizar captadores y definidores. Luego utilizo el código en los setters para asegurarme de que los valores de las propiedades estén dentro de los rangos aceptados. Me gusta este enfoque, ya que me parece que facilita la depuración ya que siempre puedo estar seguro de que se está estableciendo un valor aceptado o de que se está lanzando una excepción. También me da más confianza de que cuando paso objetos alrededor de los valores contenidos en las propiedades no voy a hacer que nada más explote.

6

no quiero una vez más para repetir el argumento de que incluso eso no esperas herencia ahora, es posible que todavía se necesita en el futuro, pero son aún más razones para utilizar captadores y definidores:

  • captadores y definidores se lo hará implementar fácilmente la validación de sus propiedades
  • Su código será seguir las directrices de codificación buenas y, como tal, será más fácil para ser leído por otros. Si me topaba con un archivo de código que no usaba getters y setters, sería muy escéptico al respecto y tendría que leerlo cuidadosamente muchas veces.
  • También esto no es solo una decisión por clase, sino una decisión para todo su proyecto. ¿Quieres tener getters y setters para algunas clases que los necesites y no para otros? Creo que la consistencia es importante.
  • Hay herramientas que pueden autogenerarse escribiendo los getters y setters para usted. Recuerde que usted escribe el código sólo una vez, sino que lo lea muchas veces,
+0

Para agregar, incluso se deben tener getters y setters incluso para propiedades privadas. Su código interno debe tener solo un punto para leer y escribir desde y hacia una propiedad interna. – Rafa

4

Mira la __get y __set métodos mágicos, que va a mantener su código limpio y no se tiene que sentir perezoso para no establecer scopel variable

public function __get($name) 
{ 
    return $this->$name; 
} 

public function __set($name, $value) 
{ 
    $this->$name = $value; 
} 

Obviamente tendrías más detalles, pero eso manejará tus accesorios.

+1

Los métodos mágicos son lentos. Estos no son reemplazos para getters y setters adecuados. – Gordon

+0

Hacen que el código sea más fácil de leer y no reducen significativamente el rendimiento. –

2

Si se trata de un currículum vitae, es probable que se preocupen tanto (o más) por su lógica como lo hacen por los pequeños detalles como getters/setters.

Si fuera yo, las haría públicas sin getters/setters, pero incluiré un comentario encima de ellas, diciendo algo como "considere hacerlas privadas y usar getters/setters dependiendo del alcance de la aplicación y el estilo preferido de código del equipo"

de esa manera:

  1. su código de curriculum vitae no es desordenado

  2. Ellos entienden que el todo no sólo perezoso y hacer público sin ninguna razón

  3. Se muestra que en lugar de seguir ciegamente un estilo particular , se consideraría la aplicación particular en la toma de una decisión.
Cuestiones relacionadas