Necesito crear aprox. 5-7 clases, cada clase contendrá muchos miembros (digamos que cada clase contendrá 20 miembros). Podría crearlas usando el acceso público, como:PHP OOP muchos setters, getters
class A {
public $myPropertyOne = '';
public $myPropertyTwo = '';
...
}
Mi forma preferida, por supuesto, para hacer que estos miembros privada y crear GET/métodos set para cada propiedad. Es decir.
class A {
private $myPropertyOne = '';
private $myPropertyTwo = '';
public function getMyPropertyOne() {
return $this->myPropertyOne;
}
public function setMyPropertyOne($myPropertyOne) {
$this->myPropertyOne = $myPropertyOne;
}
public function getMyPropertyTwo() {
return $this->myPropertyTwo;
}
public function setMyPropertyTwo($myPropertyTwo) {
$this->myPropertyTwo = $myPropertyTwo;
}
}
Pero teniendo en cuenta que una clase tendrá 20 propiedades, tendré además de esto agregue 40 métodos. Y mi preocupación aquí es cómo esto ralentizará el guión y mucha más memoria que esto requerirá (recuerden que voy a tener varias clases como esta).
Otra solución podría ser usar funciones mágicas __set, __get pero no quiero, porque la finalización del código en el desarrollo IDE no sugerirá propiedades que son cruciales para mí.
Si esto fuera un lenguaje compilado (como C++) no tendría una pregunta y usaría la solución con getters, setters pero dado que PHP es lenguaje interpretado, estoy interesado en mis scripts para usar menos RAM y ser tan lo más rápido posible.
Gracias de antemano, cualquier idea con respecto a esta pregunta sería muy apreciada!
Mi opinión
Gracias a todos por sus respuestas, sólo quería compartir mi opinión, en caso de que alguien va a buscar una respuesta a esta pregunta.
No puedo estar totalmente de acuerdo con aquellos que dicen que no debería preocuparse por el rendimiento ya que esta es una tarea de optimizadores, creo que este es un factor importante (al menos para mí), cuando se trata de lenguaje interpretado como PHP siempre tendremos que pensar en la memoria y la velocidad (todo esto me recuerda el momento en que desarrollé aplicaciones de sistema para DOS, heh :) y siempre has estado limitado con poca CPU y kilobytes de RAM total, así que te alegrabas si podría guardar un byte adicional), en el desarrollo de PHP tiene la misma imagen, independientemente de cuántos servidores agregue, el recuento de los usuarios siempre será mayor, por lo que siempre debe decidir si desea seguir el método clásico/seguro/adecuado o para evitar esto y obtener algo de velocidad o memoria.
Así que ... mi opinión es que el mejor método es usar acceso público para todos los miembros y evitar getters/setters para todas las propiedades y usar acceso privado con métodos get/set para propiedades que requieren validación o inicialización de datos antes de que se establezca un valor.
Por ejemplo:
class B {
public $myPropertyOne = '';
public $myPropertyTwo = '';
private $myPropertyThree = array();
public function getMyPropertyThree() {
return $this->myPropertyThree;
}
public function setMyPropertyThree($val) {
if(!is_array($val)) {
return;
}
$this->myPropertyThree = $val;
}
}
Gracias por dedicar tiempo a mi pregunta!
esto es una micro-optimización, y usted nunca debe preocuparse por eso –
Bueno, sí, pero una perspectiva para agregar 280 métodos (para 7 clases, 20 miembros privados) solo por esto un poco me asusta desde el punto de vista de la memoria/velocidad. Digamos que el sistema crece y extenderé esas clases hasta la cuenta de 15 ... entonces obtendré 600 métodos. Por otro lado, me doy cuenta de que estos métodos get/set se ejecutarán solo cuando sea necesario, pero al mismo tiempo asumo que cuando PHP analizará el código fuente, construirá una tabla de métodos en la memoria, realizará un análisis de sintaxis y todo esto puede ralentizar mucho el trabajo del script, ¿lo asumo? – user1476490
La memoria es relativamente económica y la sobrecarga de métodos es solo por clase (no por instancia). PHP también hace trucos como manejar solicitudes múltiples en el mismo proceso (a través de mod_php, etc.) para que el tiempo de carga inicial (tan trivial como pueda ser) se pueda ignorar por completo ... en cualquier caso, * benchmark primero * (en condiciones reales) para ver cuáles son las partes "lentas" de un sistema. (FWIW, suponga que hay 600 métodos, y cada método "desperdicia" 1kb. Un enorme 600kb es "desperdiciado". No es mucho en el esquema de las cosas ... especialmente considerando cuánto * cada variable * en PHP ya tiene " desechos ";-) –