archivo

Desarrollo

Aunque el título suene atractivo, PHP no ha incorporado la herencia múltiple como tampoco lo hace Java pero si que desde la versión >= 5.4 incorpora un mecanismo llamado Traits que simularía la herencia múltiple de clases. Los Traits son usa especie de clases cuya misión es agrupar funcionalidades comunes. Este tipo de clases no se puede instanciar directamente sino que se emplea en una clases. Ejemplo:


trait base1 {

  function metodo1(){ return 'metodo1'; }

  function metodo2(){ return 'metodo2' }

}

class base2 {

  function metodo1(){ return 'base2:metodo1' }

}

class miClase extends base2 {

  use base1;

}

Mediante la palabra reservada use, incorporamos la funcionalidad contenida en el trait base1 y mediante extends incorporamos la funcionalidad de base2. Como vereis, base1 y base2 comparten nombres de métodos comunes. Para solventar conflictos, existe una precedencia: Miembros de clase actual -> miembros del trait -> miembros heredades (extends), es decir, los miembros de miClase tienen precedencia sobre los de base1 y base1 tiene precedencia sobre los de base2.

Insertar multiples traits es muy sencillo:

use traitClass1, traitClass2, traitClassN

Resolución de conflictos entre Traits

En algunas ocasiones varios traits comparten nombres de métodos y si el conflicto no se resuelve genera un error fatal. Para resolver un conflicto disponemos de los operadores as e insteadof.

trait base1 {

  function metodo1(){ return 'metodo1'; }

  function metodo2(){ return 'metodo2' }

}

trait base2 {

  function metodo1(){ return 'base2:metodo1'; }

  function metodo2(){ return 'base2:metodo2' }

}
use base1, base2 {
base1::metodo2 insteadof base2;
base2::metodo1 insteadof base1;
}

No es la herencia múltiple de Python pero no está mal la aproximación. Preferiría que en futuras versiones resolviesen los conflictos de una manera más transparente con algún tipo de convención.

HTML5: Infografía de expectativas de uso

Muy interesante la infografía que he visto vía Genbetadev y que concluye que el 94% de los 4043 desarrolladores web encuestados opina que HTML5 será fundamental en los próximos 2 años.

Me gusta el resultado, teniendo en cuenta que los navegadores móviles se optimizarán más y las web app darán un buen resultado de rendimiento.

La teoría dice que para instalar PHPUnit en Ubuntu (Xubuntu y otros sabores) 12.04 sería usando el comando apt-get:

sudo apt-get install phpunit

La práctica es algo distinta. La instalación con el método anterior genera errores del tipo:

PHP Fatal error: Call to undefined method PHP_CodeCoverage_Filter::getInstance() in /usr/bin/phpunit on line 39

o este otro:

PHP Fatal error:  require_once(): Failed opening required 'PHP/CodeCoverage/Filter.php'

La solución que me ha funcionado: (escrita por Anthony en stackoverflow)

sudo apt-get remove phpunit //Si lo instalaste con apt-get
sudo pear channel-discover pear.phpunit.de
sudo pear channel-discover pear.symfony-project.com
sudo pear channel-discover components.ez.no
sudo pear update-channels
sudo pear upgrade-all
sudo pear install --alldeps phpunit/PHPUnit
sudo pear install --force --alldeps phpunit/PHPUnit

La Page Visibility API es una nueva tecnología que permite comunicar a una página web cuando ha dejado de estar visible al usuario: cambio de pestaña, minimización del navegador… etc La especificación se encuentra en fase experimental y que por el momento la soportan las últimas versiones de algunos navegadores de escritorio: chrome >= 13, Firefox >= 10 y Internet Explorer 10. Safari y Opera no la soportan en sus versiones actuales.

En el MDN se encuentra un ejemplo para ver el modo de uso. También puedes consultar el borrador del W3C.

A %d blogueros les gusta esto: