6.8.11

¿Tengo problemas?

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: