Abr 02

Desde la llegada de PHP 5.0 disponemos de varios métodos mágicos para nuestras clases PHP, entre ellos tenemos __toString() que nos permite codificar cómo queremos que se comporte una clase cuando una instancia de ella se convierte a un string.

Aunque a simple vista el método __toString() pueda parecer poco importante en PHP éste toma mucha relevancia si trabajamos con symfony o algún otro framework orientado a objetos donde la información de la base datos se encuentra mapeada en un modelo de objetos.

A pesar de que __toString() está disponible desde la versión 5.0.0 del PHP en mi opinión no empieza a ser realmente útil hasta la versión 5.2.0, algo que en el changelog del PHP reflejaron con un tímido:

Changed __toString() to be called wherever applicable. (Marcus)

Hasta entonces __toString() sólo se llamaba cuando se usaba echo() o print() lo que limitaba mucho su funcionalidad. Desde la versión 5.2.0 __toString() se llama siempre que tratemos a un objeto como a un string.

Por ejemplo dada la siguiente definición de clase:

class User extends BaseUser
{
  public function __toString()
  {
    return $this->getName();
  }
}

Hasta PHP 5.2.0 sólo podíamos invocar a __toString() con:

$user = new User();
echo $user;
print $user;

Desde la versión 5.2.0 podemos hacer varias cosas interesantes con __toString() sobretodo relacionadas con el manejo de arrays de objetos, algo muy frecuente en los frameworks que corren por ahí hoy en día.

Por ejemplo si obtenemos el típico array de objetos con symfony:

$users = UserPeer::doSelect(new Criteria());

Trabajando directamente con las funciones de PHP entre otras muchas cosas podemos:

  • Ordenar el array de objetos con un simple sort()
  • Eliminar objetos duplicados del array con un array_unique()
  • Generar una lista separada por comas para la presentación con un implode()
  • Buscar un objeto determinado dentro del array con array_search()

Alternativas a __toString()

Si no tenemos la suerte de trabajar con PHP 5.2.x, o si queremos poder trabajar con un método distinto de __toString() para determinadas operaciones con arrays de objetos, podemos usar un código parecido al que propongo a continuación:

class objectTools
{
  protected static function getMethodValues($list, $method)
  {
    $items = array();
    foreach ($list as $key => $obj)
      $items[$key] = $obj->$method();
    return $items;
  }
  protected static function getObjectList($items, $list)
  {
    $ret = array();
    foreach ($items as $key => $item)
      $ret[] = $list[$key];
    return $ret;
  }
  public static function arraySortByMethod($list, $method, $sort='desc')
  {
    $items = self::getMethodValues($list, $method);
    asort($items);
    if ($sort=='desc')
      return array_values(array_reverse(self::getObjectList($items, $list)));
    return self::getObjectList($items, $list);
  }
  public static function arrayUniqueByMethod($list, $method)
  {
    $items = self::getMethodValues($list, $method);
    return self::getObjectList(array_unique($items), $list);
  }
  public static function arrayImplodeByMethod($list, $method, $sep)
  {
    $items = self::getMethodValues($list, $method);
    return implode($sep, $items);
  }
  public static function arraySearchByMethod($list, $method, $needle)
  {
    $items = self::getMethodValues($list, $method);
    return array_search($needle, $items);
  }
}

Lo anterior es más una propuesta de código que algo decente para ser distribuido. Simplemente se trata de trabajar con un array temporal para almacenar los valores del método solicitado, correr la función PHP y, si es necesario, volver a construir el array de objetos.

Algunos ejemplos de uso:

$ordenados = objectTools::arraySortByMethod($users, 'getName', 'asc');
$sin_duplicados = objectTools::arrayUniqueByMethod($users, 'getName');
$pos = objectTools::arraySearchByMethod($users, 'getName', 'oriol');
//y por último en una plantilla...
echo 'Usuarios: ' . objectTools::arrayImplodeByMethod($users, 'getName', ', ');

Fácilmente se pueden añadir tantos métodos de tratamiento de arrays como se necesiten... o mucho mejor hacer un método que simplemente reciba como variable la función PHP a ejecutar. En mi caso de momento sólo necesito estos en concreto y también así los puedo controlar individualmente.

Aunque estos métodos de objectTools nacieron como "parche" rápido dado que no tenía PHP 5.2.x para un proyecto symfony, ahora, una vez solventando el problema con los servidores, los sigo encontrando útiles en múltiples situaciones. Por supuesto se ha de tener presente el poco rendimiento de este código frente a realizar queries a medida usando el objeto Criteria, pero si ya tenemos un array de objetos en memoria sí que será más óptimo trabajar con él en lugar de lanzar varias queries contra la base de datos.

Etiquetas:
Feb 25

Este Viernes 27 de Febrero nuestros amigos de phpLondon organizan su conferencia anual de PHP, la PHP UK Conference 2009, sin duda una de las conferencias de PHP con más renombre y una de las que cae relativamente cerca (si vives en España).

Este año pinta realmente interesante con presentaciones muy variadas, puedes revisar la agenda completa en la web del evento. Entre otros temas se hablará sobre como vivir (o sobrevivir) con los frameworks PHP, mitos sobre symfony, un poco de REST, Flex y AIR, Drizzle, PHP 5.3 y 6.0 (namespaces, funciones lambda, etc.)... incluso uno de Microsoft nos "intentará" descubrir Windows como servidor para aplicaciones PHP (esto no me lo pierdo).

Aunque entre viaje, estancia y entrada asistir tiene un coste considerable es una pequeña aventura PHP que merece la pena. Como siempre en este tipo de eventos a parte de los nuevos conocimientos que se puedan adquirir se ha de valorar la posibilidad de networking con un buen número de gurus en la materia.

PS: y si el presupuesto no te lo permite (o en tu empresa no quieren pagártelo) siempre puedes esperar a la siguiente edición de la PHP Barcelona Conference :)

Etiquetas:
Feb 21

Es un procedimiento muy sencillo que está perfectamente detallado en la documentación de WordPress aunque quizás faltan un par de puntos por explicar un poco mejor.

Si nuestra intención es hacer borrón y cuenta nueva con nuestro blog eliminando todos los archivos pero conservando la base de datos los pasos a seguir son los siguientes:

[1] Como siempre antes de empezar cualquier tarea parecida backup de todo. Incluso es buena idea montar el blog entero en otro sitio para después poder comparar el viejo con el nuevo.

[2] Desactivamos todos los plugins y seleccionamos el tema por defecto. Aunque en nuestro caso como tenemos intención de borrar todos los archivos el nuevo WordPress desactivará todo lo que no encuentre.

[3] Borramos todos los archivos anteriores. Si tenemos el wordpress mezclado con otras cosas el comando en cuestión es algo como:

$ rm -rf index.php license.txt readme.html wp-* xmlrpc.php

[4] Descomprimimos la última versión de WordPress en el mismo sitio donde teníamos la anterior.

[5] Editamos el nuevo wp-config.php y añadimos los datos de conexión y nombre de la BD.

[6] Comprobamos en qué codificación está trabajando nuestro WordPress. Por ejemplo con:

mysql> show create table wp_posts;

Nos fijamos en el CHARSET utilizado y definimos DB_CHARSET con el mismo valor. En el caso de ser "utf8" no tenemos que tocar nada pero si estamos con "latin1" es necesario indicarlo en wp-config.php con:

define('DB_CHARSET', 'latin1');

[7] Iniciamos el programa de actualización apuntando el navegador a la URL habitual del dashborad (p.e. http://tublog.es/wp-admin/)

[8] Automáticamente aparecerá un mensaje diciendo que debemos proceder con la actualización de la BD. Hacemos clic en "Siguiente" y cruzamos los dedos... si todo va bien te aparecerá algo como "Update successful".

[9] WordPress casi actualizado!

Digo casi porque casi seguro vamos a necesitar realizar alguno de lo siguientes pasos adicionales:

  • Si habíamos subido archivos al WordPress utilizando su dashboard hemos de copiar la anterior carpeta wp-content/uploads a la nueva instalación.
  • Si trabajábamos con algún plugin para los tags debemos lanzar la importación manualmente desde el dashboard, por ejemplo en el caso del UTW desde "Herramientas" -> "Importar" -> "Ultimate Tag Warrior".
  • Si ha pasado mucho tiempo desde la última actualización no es mala idea repasarse las opciones de configuración de WordPress y comprobar que todo está ok, especialmente la sección de Permalinks.
  • Como hemos empezado de nuevo en lo que a código PHP se refiere es necesario volver a instalar los plugins que echemos en falta y un tema que nos guste. Por supuesto descargando las últimas versiones de todo y no aprovechando nada del anterior WP para así sacar el máximo partido de las nuevas funcionalidades (en parte uno de los objetivos del procedimiento descrito en este post).
Etiquetas:
Sep 20

El próximo 27 de Setiembre los de grupo de programadores PHPBarcelona hemos organizado la segunda edición de la Barcelona PHP Conference. Será la primera conferencia internacional de PHP realizada en España con un formato y contenido comparable a otras conferencias de reconocido renombre realizadas alrededor del mundo.

Como ponentes tenemos a: Derick Rethans, Scott MacVicar, Helgi Thormar, Marcus Bointon, Zoë Slattery, Arno Schneider, Jordi Roura, Pau Garcia-Milà y Jens Bierkandt.

Que nos hablarán de:

  • Xdebug
  • Website releases made easy with the PEAR installer
  • SQLite3
  • Text indexing and search libraries for PHP
  • Rasmus, think again! - Agile Framework == happy PHP Developer
  • How to pimp high volume PHP websites
  • Email in PHP
  • Tuning the usability of online applications using web analytics techniques
  • eyeOS: Open Source Web Desktop System in PHP

Puedes visitar phpconference.es para revisar toda la información de este evento:
la agenda, los ponentes, las presentaciones, el local, etc.
y también para inscribirte por tan sólo 20€.

Desde los comienzos de este grupo de programadores este fue uno de nuestros principales objetivos (o sueños): conseguir montar una conferencia del mismo estilo y nivel que las que se hacen por todas partes pero realizada en Barcelona y con entrada gratuita o por un precio reducido.

Finalmente lo hemos conseguido! y el siguiente sábado podrás disfrutar de un evento de estas características por sólo 20€ y en la ciudad de Barcelona. Evidentemente (o al menos a mi entender) si eres un programador PHP de Barcelona o cualquier otra localidad de España esto supone una gran noticia. El precio de la entrada sumado al viaje y la estancia no llega al 20% de lo que te constaría asistir a cualquiera otra conferencia de PHP parecida.

Sin duda una oportunidad única para pasarse todo un día aprendiendo mucho, conociendo a auténticos "gurus" en la materia, haciendo contactos con algunas de las principales empresas que desarrollan en PHP en nuestro país, compartiendo experiencias con programadores de todo el mundo, etc. Todo acompañado de bebidas, desayuno, comida, algún concurso y, como siempre, las cervecitas del final.

Para ir abriendo boca aquí os dejo un vídeo promocional que se ha currado Arno Schneider:


Trailer hecho con animoto

Etiquetas:
May 26

Con los del grupo de programadores PHP de Barcelona ya la hemos vuelto a liar con la realización de nuestro próximo evento, la primera edición de la Barcelona PHP Workshop que se celebrará el siguiente 7 de Junio. A diferencia de la pasada Barcelona PHP Conference que organizamos este es un nuevo tipo de evento totalmente enfocado a talleres prácticos de programación en PHP.

A pesar del éxito de la pasada conference mucha gente se quedó con las ganas de practicar más y escuchar menos, pues bien, si fuiste uno de estos esta es tu oportunidad :^)

Serán un total de 6 talleres de programación en PHP ocupando todo el sábado donde tanto las temáticas como los ejercicios serán de lo más variado:

  • Construir una pequeña red social con Symfony.
  • Trabajar con motores de workflow.
  • Internacionalizar proyectos PHP.
  • Usar AJAX para modernizar tus páginas.
  • Proteger tu sites contra XSS unido a un pequeño concurso de seguridad.
  • Como usar VIM como una potente IDE para el desarrollo en PHP.

Como añadido gracias a nuestros patrocinadores podremos disfrutar de desayuno, comida, bebida, algunos regalos, etc.

Puedes visitar la página del evento para revisar la agenda completa e inscribirte por tan sólo 5 euros:
http://phpbarcelona.org/eventos/primera-barcelona-php-workshop

Tenemos un total de 200 plazas disponibles y en el momento de escribir este post vamos por los 154 asistentes!

Etiquetas:
preload preload preload