jueves, 26 de mayo de 2011

Objetos de Clase Anónima en PHP

En mi trabajo, desde el principio siempre trabajé con Arrays como método para contener "varias variables en una sola"... pero no nos digamos mentiras, trabajas con Arrays no es más cómodo que usar Objetos desde el punto de vista de la comodidad en digitación.

Soy una persona que le da mucha importancia a la velocidad en el trabajo, prefiero usar el teclado casi para todo, uso combinaciones de teclas siempre que sea posible y digito medianamente "semirápido" sin ver el teclado (De hecho, hice casi completo el cursito de Mecanet cuando usaba Windows :D). Trabajar con Arrays implica la digitación de algunos caracteres que en lo personal me dan flojera, más cómodo es para mí usar Objetos, pues con sólo usar "->" tienes acceso a sus propiedades.

No me vas a negar que usar:

$object->property = 0

Es más cómodo que usar:

$array["index"] = 0

Además, no es mucha la diferencia, de hecho no es notoria, pero en el trabajo con PHP trabajan un poquitín más rápidos los Objetos que los Arrays (Cosa de algunos Milisegundos).

En vista de lo anteriormente comentado, siempre tengo la necesidad de usar Objetos en lugar de Arrays, por ende en caso de necesitar pasar varios parámetros a una función en una sola variable, suelo pasarle una instancia de la clase Anónima nativa de PHP.

Crear clases anónimas en PHP es MUY FÁCIL, sólo debemos crear una instancia de la clase StdClass, la cual es nativa de PHP; Luego de ésto, podremos agregarle propiedades a nuestro antojo... veamos un ejemplo.

$user = new StdClass();
$user->login = "Rob";
$user->password = "lakoi";

//Nada nos impide el poder agregarle Arrays como propiedades
$user->data = array("gender" => "Male", "age" => 22);

// U otros Objetos
$user->data = new StdClass();
$user->data->gender = "Male";
$user->data->age = 22;

//O podemos pre-crear el objeto que le agregaremos
$userData = new StdClass();
$userData->gender = "Male";
$userData->age = 22;
$user->data = $userData;

Cabe destacar, que si tu idea es la reutilización de código, no es adecuado usar la clase StdClass, en éstos casos, lo ideal es crear una clase llamada User que se encargue de asignarle a las instancias sus respectivas propiedaes y métodos.

Un caso de uso común cuando estoy programando, es convertir el Array superglobal que venga por REQUEST (Sea $_POST, $_GET O $_REQUEST) a Objeto usando los Casts de PHP y luego accediendo a sus propiedades normalmente.
Ejemplo:

//Recibimos $_POST 
//No haremos limpieza de SQL Injection ni XSS 
//para no alargar mucho el ejemplo 
$params = $_POST; 

//Suponiendo que $_POST sea igual a: 
// array("gender" => "M")
//Obtenemos su género con el método tradicional 
$gender = $_POST["gender"]; 

//Ahora lo convierto a Objeto usando un Cast de PHP 
$params = (object)$params; 

//Y obtenemos nuevamente el género llamando a su propiedad respectiva 
$gender = $params->gender;

Con total sinceridad. ¿Qué método prefieren? ¿El primero o el segundo?
Yo prefiero usar Objetos, me parece que el código queda más compacto y además, como lo dije arriba, trabajo más rápido.

Ya queda a tu criterio y/o costumbre, cuál de los dos métodos usar.
Yo en lo personal, me he acostumbrado a usar Objetos, y me parecen mucho más cómodos :).

@yeinerf
Publicar un comentario