Pregunta

Estoy haciendo una nueva clase en PHP. No anticipo que esta clase se haya extendido. ¿Debería molestarme en hacer que los miembros de la clase sean privados e implementando funciones de Getter y Setter?

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 estoy escribiendo en código para demostrar mi estilo de codificación. La pregunta es si un empleador querrá ver a Getters y Setters, o eso solo desordenará las cosas?

¿Fue útil?

Solución

No me molestaría si fuera tú. Tienes razón, esa decoración acaba de acaparar tu clase.

Otros consejos

No quiero una vez más repetir el argumento de que incluso que no esperas herencia ahora, es posible que aún lo necesite en el futuro, pero aún son más razones para usar Getters y Setters:

  • Getters and Setters le permitirá implementar fácilmente la validación de sus propiedades
  • Su código seguirá buenas pautas de codificación y, como tal, será más fácil que otros lean. Si me encontrara con un archivo de código que no usara Getters y Setters, sería muy escéptico al respecto y tendría que leerlo cuidadosamente muchas veces.
  • Además, esta no es solo una decisión por clase, sino una decisión para todo su proyecto. ¿Quieres tener Getters and Setters para algunas clases que los necesitas y no para otros? Creo que la consistencia es importante.
  • Hay herramientas que pueden autogenerar a la escritura de los obtenedores y los setters para usted. Recuerde que escribe el código solo una vez, pero lo lee muchas veces,

Echa un vistazo a los métodos __get y __set Magic, mantendrá tu código limpio y no tendrás que sentirte flojo por no establecer Scopel variable.

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

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

Obviamente, tendría más detalles, pero eso manejará sus accesorios.

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 el buen diseño OO no es el objetivo de la programación. El objetivo es hacer que las cosas funcionen y poder modificarlas fácilmente cuando sea necesario.

Puede anular __get & __set hasta donde yo entiendo.http://php.net/manual/en/language.oop5.overloading.php

Me gusta hacer que las propiedades en mi clase protegieran o sean privadas y luego use Getters and Setters. Luego uso el código en los establecedores para asegurarme de que los valores de la propiedad estén dentro de los rangos aceptados. Me gusta este enfoque, ya que encuentro que hace que la depuración sea más fácil, ya que siempre puedo estar seguro de que se establece un valor aceptado, o se está lanzando una excepción. También me da más confianza que cuando paso objetos alrededor de los valores sostenidos en las propiedades no va a causar nada más.

Si es para un currículum, es probable que les importe tanto (o más) sobre su lógica como los pequeños detalles como Getters/Setters.

Si fuera yo, los haría públicos sin Getters/Setters, pero incluiría un comentario por encima de ellos, diciendo algo como "Considere hacer estos privados y usar Getters/Setters dependiendo del alcance de la aplicación y el estilo de código preferido del equipo"

De esa manera:

  1. Su código de currículum no está desordenado

  2. Entienden que no solo eres perezoso y haciendo todo público sin razón

  3. Muestra que, en lugar de seguir ciegamente un estilo particular, consideraría la aplicación particular para tomar una decisión.

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

Si no, entonces no pierdas tu tiempo en estos.

No ganas nada al hacer esto si no los usas de una "manera especial" y tal vez incluso esté ralentizando todo

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

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top