Me he estado preguntando últimamente si tengo problemas para programar, que igual tiene que ver con la razón de que estoy loco o algo así.
No soy tan adicto de la programación orientada a objetos al puro estilo de JAVA, y si comparamos con Ruby o Javascript pues definitivamente no hay comparación. Menos aún con PHP.
Pero debo confesar que también pase por la obsesión de programar 100% objetos desde que conocí CodeIgniter, era algo bizarra su implementación OOP aún con PHP4. Desde ahí se me zafaron los tornillos, chale.
Pero igual con el paso del tiempo he ido tomando mis propias decisiones con respecto a determinado patrones, honestamente yo comencé como scripter empleando funciones y toda la cosa. Es más, antes de leerme un buen libro de Javascript pensaba que
alert()
era una función. Errado he.
En fin, no se ustedes pero al menos yo si me divierto programando cosas fuera de lo común, como implementar -seudos- singleton con funciones, factory, registry o incluso prototype con clases estáticas.
Singleton
function instance($class) { static $set = array(); if (empty($set[$class])) { $set[$class] = new $class; } return $set[$class]; } // ejemplo $foo = instance('stdClass'); $foo->bar = 'buzz'; echo instance('stdClass')->bar; // => buzz
Factory
function load($class) { return new $class; } // ejemplo $foo = load('stdClass'); $foo->bar = 'buzz'; echo load('stdClass')->bar; // error
Registry
function bag() { static $set = NULL; if (is_null($set)) { $set = new stdClass; } return $set; } function get($key, $value) { bag()->$key = $value; } function set() { return bag()->$key; } // ejemplo $obj = new stdClass; $obj->bar = 'buzz'; set('foo', $obj); echo get('foo')->bar; // => buzz get('foo')->bar = strtoupper($obj->bar); echo get('foo')->bar; // => BUZZ unset($obj->bar); echo get('foo')->bar; // error
Prototype
class prototype { private static $stack = array(); public static function method($name, $callback) { self::$stack[$name] = $callback; } public static __callStatic($name, $args) { return call_user_func_array(self::$stack[$name], $args); } } // ejemplo prototype::method('bye', function() { echo 'Adios pinchi mundo!'; }); prototype::bye(); // => Adios pinchi mundo!
Me queda claro que puede no ser correcto, pero concluyo que es completamente valido. Además estoy seguro que no todo se puede conseguir sin objetos, de ser necesario uso objetos.
No soy religioso con respecto a ello.
Et voilà.
No hay comentarios:
Publicar un comentario