/ clases

Optimizando procesos en clases

Cuando uno va aprendiendo nuevas técnicas o teniendo más experiencia llega a un punto donde quiere ir automatizando algunas cosas, gracias a eso se ha profundizado maneras optimas y otras no optimas de hacer tareas con el código.

Recuerdo que hace tiempo llegue a un punto donde las clases que heredaban una clase padre, quería que este se ejecutara automáticamente unas funciones, por ejemplo, validar ciertas cosas y así solo centrarme en el método. Para que quede un poco claro, anteriormente o clásicamente se podía decir que así se trabajaba.

validarToken() && $this->validarPermisos()){ //codigo } } } ?>

Como pueden ver, la clase padre tiene 2 métodos para validar si el usuario es óptimo para ejecutar el código que está dentro del IF, es algo sencillo cuando solo se programa con pocas clases, pero cuando ya trabajamos con varias clases que heredan y repetir el proceso es fastidioso o el simple hecho de cambiar el nombre de una de las funciones es cambiar en todas las clases que han heredado la clase padre.

Por eso ejecutar unas funciones automáticamente cuando declaramos la clase seria genial, pero la única cosa que se ejecuta automáticamente en una clase es el constructor y eso es cuando lo declaramos en una variable. Así que podemos ejecutar el código automáticamente cuando declaramos la clase hijo y al mismo tiempo ejecutar la función en clase padre para que este valide y así saber si la persona tiene o no permisos necesarios.

valido = $this->validarToken() && $this->validarPermisos(); } protected function validarToken() : bool { } protected function validarPermisos() : bool{ } } class hijo extends Padre{ public function __construct(){ parent::__construct(); if($this->valido){ //codigo } } } ?>

Aun si queremos ir un poco más lejos, es decir, evitar el parent::__construct(); y que al momento de declarar la clase hija esta ejecute el constructor de la clase padre y después el constructor de la clase hija, aunque esto serial genial, pero en PHP no se puede, pero también es bien sabido que si la clase hija no tiene un constructor automáticamente este llama al constructor de la clase padre y si hacemos unas modificaciones esto puede tener una solución como puede ver en el siguiente código.

valido = $this->validarToken() && $this->validarPermisos(); if(method_exists($this, '__construct_hijo')){ if(func_num_args() > 0){ call_user_func_array(array($this, '__construct_hijo'), func_get_args()); }else{ $this->__construct_hijo(); } } } protected function validarToken() : bool { } protected function validarPermisos() : bool{ } } class hijo extends Padre{ public function __construct_hijo(){ if($this->valido){ //codigo } } } ?>

Como pueden ver validamos si existe el método __construct_hijo, si existe lo podemos ejecutar, ahora si requerimos pasar parámetros debemos validar si hay o no parámetros y llamarlo de otra manera para pasarle los parámetros en el mismo orden en que fueron metidos.

Ahora ya automatizamos algunas cosas, esto es útil cuando estamos programado un API y debemos validar el token o los permisos del usuario para ver si puede o no ejecutar el código, ahora les mostrare un ejemplo (sin el IF en el __construct_hijo).

validarToken() && $this->validarPermisos()){ if(method_exists($this, '__construct_api')){ if(func_num_args() > 0){ call_user_func_array(array($this, '__construct_api'), func_get_args()); }else{ $this->__construct_api(); } } } } protected function validarToken() : bool { } protected function validarPermisos() : bool{ } } class clientes extends BaseApi{ public function __construct_hijo($nombre = ''){ //codigo } } $app1 = new clientes(); $app2 = new clientes('hola'); ?>

ilich

Programador Mexicano con 14 años de experiencia, ha incursionado en diferentes áreas ampliando su experiencia. Aprendí programación por que quería hacer mi propio video juego aun que he toca

Read More