Jugando con PHP 6
PHP 6 todavía esta en pañales. Pero para saciar un poco la ansiedad me baje un build de PHP 6 y me puse a jugar un rato y buscar que nos trae la nueva versión.
Como con muchos otros proyectos Open Source los ansiosos tenemos la ventaja de poder bajar las versiones que no llegan a una versión alfa, es decir que aún le falta muchas funcionalidades y no es segura pero podemos ver cual es el camino a seguir por PHP ya que generalmente lo más importante se desarrolla primero.
Instalación
La instalación varia según el sistema operativo y que tipo de instalación quieras hacer. Yo lo hice en Windows XP e instalando PHP como un módulo de Apache.
- Bajar Instalador de Apache 2.0.63 para Windows (desde Argentina, ver otros mirrors, versiones y sistemas operativos)
- Para el PHP 6 bajé el build del 22 de Marzo del 2008, les recomiendo bajar la versión más actualizada desde PHP Snapshot.
- Configurar Apache. Simplemente es agregar estas líneas
# Cargar moduloLoadModule php6_module "c:/php/php6apache2.dll"# Agregar el tipo de aplicacion para la extension php AddType application/x-httpd-php .php # Configurar la ruta del php.ini PHPIniDir "C:/php"
C:/php es el directorio donde descomprimieron el build de PHP.
- Probar si funciona http://localhost/
- Crear un archivo php (index.php por ejemplo) con un phpinfo, en alguna carpeta del servidor (usualmente %Apache%/htdocs).
- Si abriendo desde el navegador ven PHP Version 6.0.0-dev ¡ya esta instalado! Sino
estas al hornopostea en los comentarios que problema tenes.
Cambios en PHP 6
Los cambios fueron discutidos hace bastante y varios blogs y sitios se hicieron eco de las características de la nueva versión de PHP [1] [2] [3]. No encontre nada que pueda agregar a lo ya publicado.
Mis pruebas
Unicode, ¿el objetivo principal de PHP?
Para el que no sepa bien que es Unicode puede leer en su web oficial, ¿Qué es Unicode?. Un slide de Andrei Zmievski nos describe muy bien de que se trata este cambio de PHP, dando más soporte a Unicode.
Veamos como nos afecta como programadores. El otro día estaba programando y le pregunte como le gustaba mas poner una variable que describa el año. Las opciones eran:
- $anio: No me gusta porque no estoy acostumbrado a relacionarlo con año.
- $anyo: Es la que mas uso pero a cualquiera le puede pasar lo mismo que a mi con anio.
- $ano: Es de muuuuy mal gusto (no estoy hablando del ano, sino de usarla como variable).
- $year: Mi opción preferida, pero no queda muy bien junto a $dia y $mes.
Volviendo al tema, el soporte nativo de Unicode nos permite usar la variable $año sin ningún problema.
Esto nos permite crear un script como:
class Avión{protected $_vuelos = array(); public function voló(Piloto $piloto, $día, $mes, $año)
{
if(!isset($this->_vuelos[$año]))
{
$this->_vuelos[$año] = array($mes => array($día => $piloto));
return;
}
if(!isset($this->_vuelos[$año][$mes]))
{
$this->_vuelos[$año][$mes] = array($día => $piloto);
return;
}
$this->_vuelos[$año][$mes][$día] = $piloto;
}
public function díasQueVoló()
{
$output = "Vuelos\n\n";
foreach($this->_vuelos as $año => $vuelosPorAño)
{
$output .= "[$año]\n";
foreach($vuelosPorAño as $mes => $vuelosPorMes)
{
$output .= "\t[$mes]\n";
foreach($vuelosPorMes as $día => $piloto)
{
$output .= "\t\t$día: $piloto\n";
}
}
}
return $output;
}
}
class Piloto
{
protected $_nombres = "";
protected $_apellidos = "";
public function __construct($nombres, $apellidos)
{
$this->_nombres = ucwords(strtolower($nombres));
$this->_apellidos = ucwords(strtolower($apellidos));
}
public function __toString()
{
return $this->_apellidos . ', ' . $this->_nombres;
}
}
$piloto_1 = new Piloto('RODRIGO SEBASTIÁN', 'ARCE');
$piloto_2 = new Piloto('luka', 'österreich');
$piloto_3 = new Piloto('matías', 'pérez ñandú');
$avión = new Avión();
$avión->voló($piloto_1, 30,12,2007);
$avión->voló($piloto_2, 2,2,2008);
$avión->voló($piloto_1, 7,2,2008);
$avión->voló($piloto_2, 14,2,2008);
$avión->voló($piloto_2, 1,3,2008);
$avión->voló($piloto_3, 5,3,2008);
echo "<pre>\n", $avión->díasQueVoló(), "\n</pre>";
Realmente no le veo mucha utilidad a poner tildes a las variables. En el caso de palabras que tengan ñ o ç en portugués por ejemplo lo veo más útil. Las tildes pueden confundir.
Espero que muchos programadores orientales tampoco comiencen a escribir sus códigos en sus idiomas porque también nos perderiamos todo su código.
A pedido del público llegan… los Namespaces
Los namespaces son sin duda desde la implementación mejorada de PHP Orientado a Objetos, la funcionalidad mas esperada. En realidad llegan con PHP 5.3 que también esta en desarrollo sin versión alfa pero yo los probé con PHP 6.
Su uso todavía no me convenció del todo, espero que mejoren su uso al importar las clases (¡estoy cansado del __autoload!) , pero esto no quiere decir que no sean prácticas.
Este es un ejemplo simple para mostrar su uso:
namespaces.php
use Controller as MyController;require 'Controller/Front.php';new MyController::Front('
hola ¿cómo estás?
‘);
Controller/Front.php
namespace Controller;require 'HtmlEncode.php';class Front{
public function __construct($html)
{
echo HtmlEncode::encode($html);
}
}
Controller/HtmlEncode.php
namespace Controller;class HtmlEncode{static public function encode($html)
{
return htmlentities($html);
}
}
Otras mejoras
Una mejora que me sorprendió por lo simple y práctica es acerca del operador ternario y el isset dos grandes aliados que molestan por la cantidad de veces que tenemos que escribir código repetitivo. Si no tienen ni idea de que hablo con este ejemplo se van a dar cuenta:
// el viejo y amigo par isset y ternario$numero_pagina = (isset($_GET['pagina'])) ? $_GET['pagina'] : 1;echo "Numero de pagina: $numero_pagina";// La nueva forma $numero_pagina = $_GET['pagina'] ?: 1; echo "Numero de pagina: $numero_pagina"; $pagina_siguiente = $numero_pagina + 1; $pagina_anterior = $numero_pagina - 1; echo "<a href="?pagina=$pagina_anterior">Anterior</a>\n"; echo "<a href="?pagina=$pagina_siguiente">Siguiente</a>\n";
Tags: investigaciones, php, php 6
