Masterclass ADWE Madrid

31
Ángel Luis Quesada Nieto CEO at Kubide.es PHP 5.3 masterclass Desde el CGI al OOP

description

Masterclass en Asociación de Desarrolladores Web de España (Madrid) sobre PHP 5.3 http://www.adwe.es/

Transcript of Masterclass ADWE Madrid

Page 1: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

Desde el CGI al OOP

Page 2: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

Indice

- Sobre el que habla- PHP en el tiempo- Del CGI al OOP- Unos pequeños trucos- Enlaces y preguntas- Cervecitas networking

Page 3: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

Ahhmm!!!

Hoy competimos contra #comunicatDevelopers! Consigamos ese TT!

#adwe_mad

@peppersanblai te queremos!

Page 4: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

Sobre el que habla

AKA:• Ángel Luis Quesada Nieto• gelito• alquesada

Mi proyecto actual:• Kubide

• Advanced web Development• Developer Angels

Page 5: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP en el tiempo

En 1994 Rasmus Lerdorf decidió poner en su web la fecha actual*.

Aparece PHP. Personal Home Page Tools

<htm><body>Today is:<?php echo date(); ?>

</body></html>

Page 6: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP en el tiempo

No es hasta PHP 3.0 que se deciden tomar las cosas en serio.• Aparece en 1998• Se reescribe por completo el parser (y después todo el código).• Se crea Zend Technologies.• Empieza a aposentarse como alternativa web.• Se le cambia al nombre actual:

• Php Hipertext Pre-procesor

Page 7: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP en el tiempoEn el 2000 llegó PHP 4.0• Aparece la versión reescrita completamente• Incorpora ya el motor Zend.• Sin ser los dueños, Zend Technologies, se destaca• Aparece The PHP Group.• Se adentra en la OOP• Se hace completamente con el mercado web

• Posiblemente por su flexibilidad y facilidad de uso• Esto nos lleva al “caos del PHP”

• Posiblemente por la falta de competencia real• ASP• JAVA• Ruby (RoR surge en 2004)• Perl

Page 8: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP en el tiempoEn el 2004 llegó la gran chapuza PHP 5.0• Deciden cambiar de mentalidad y apostar en serio por OOP

• PseudoPolimorfiso• PseudoThreads• Autoload y Magic methods• Manejo de excepciones

• La aceptación en la web es escasa o nula.• Crea rechazo entre developers y Sysadmins• El nivel de Bugs es brutal• En 2006 era difícil encontrar un hosting con PHP 5.0

• Y la competencia aparece fuerte.• Aparecen los frameworks para otros lenguajes• En PHP el cacao es tan grande que tardan más en aparecer

Page 9: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP en el tiempo

A finales del 2009 llega el presente PHP 5.3• Mas de 550 bugs solventados desde 5.0 hasta 5.3

• Sobretodo en el ambito de la seguridad y la estabilidad• Los hostings no tardan ni unos meses en incorporar PHP 5.3• Empiezan a incorporar buenas funcionalidades OOP

• Namespacing• Clase DateTime (por fin!)• Phar (JAR)• ...• Y … ejem... goto

• Todavía queda mucho por delante, pero ya va siendo OOP

Page 10: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP en el tiempo

Page 11: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP en el tiempo

El futuro PHP 6 ¿?• PHP 5.3 + UNICODE• Limpieza y reestructuración.• Enfoque eminentemente OOP

Lo veremos? Lo dudo … PHP 7 ¿?

Page 12: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

Os acordáis?!!

Hoy competimos contra #comunicatDevelopers! Consigamos ese TT

#adwe_mad

@gersonbeltran te queremos!

Page 13: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOP

Pasamos del date()

<htm><body>Today is:<?php echo date(); ?>

</body></html>

Page 14: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOP

… al DateTime

<?phptry { $date = new DateTime('2000-01-01');} catch (Exception $e) { echo $e->getMessage(); exit(1);}

print $date->format('Y-m-d');?>

Page 15: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPLo primero es:• Pensar OOP, “pensar en Java”

• No hay funciones sueltas.• No hay defines sueltos• Las clases se encapsulan (y se usan los namespaces)• Gestión de errores try {} catch(e) {}

• Y por su puesto, no olvidar los patrones de diseño! • I'm a GoF fanboy• Patron Façade

• Un único archivo de entrada (index.php)• Patron MVC

• Separamos los Modelos (el vehículo – el usuario)• De la Vista (la carretera – el html)• Y lo gestionamos con el Controlador (las reglas de tráfico)

Page 16: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOP

Page 17: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPindex.php

<?phprequire_once ZonaSegura. "Bootstrap.php";Bootstrap::main();

$con = new Controller();$con->main();print $con->toHTML();?>

Page 18: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPindex.php• Zona Segura

• No accesible desde el DocumentRoot• Las clases nunca deberían ser accesibles.

• Un solo require• Cargamos el Bootstrap (antiguamente la conf.php)• Cargamos el autoload

• Cargamos y ejecutamos el main del controller principal• Recordar, “piensa en Java”

• Un solo print*• Aquí Java nos gana.• No es obligatorio, para optimizar se pueden usar varios

Page 19: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPBootstrap (la correa de arranque)class PWT_Bootstrap {

/** @staticvar bool Static private var charge of singleton pattern * @access private * @var bool */protected static $singleton = false;public static final function main(){

if (self::$singleton)return TRUE;

try {self::$singleton = trueself::setupProjectConf(); self::setupAutoload();self::setupEnvironment(); self::setupDatabase();self::setupLanguageEnvironment(); self::setupView();

} catch (Exception $e) {PWT_Notice::catchException($e);

}}

}

Page 20: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOP__autoload (bye, bye requires)

private final static function setupAutoload(){

$includePath = ROOT . DIRECTORY_SEPARATOR . PATH_SEPARATOR;$includePath .= get_include_path();set_include_path($includePath); // Add the directories in pathspl_autoload_register("self::_autoload", true); // Registry the _autoload()

}private static function _autoload($classname){

$zend = preg_replace ("/_/",DIRECTORY_SEPARATOR,$classname).".php";if ($fh = @fopen($zend, "r", 1)){

fclose($fh); require_once($zend); return;}try {

throw new PWT_Exception(104, $classname);} catch (PWT_Exception $e) {

PWT_Notice::catchException($e);}

}

Page 21: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPAutoload• Nos olvidamos de requires e includes• Las funciones autoload no devuelven ningún valor• Se pueden añadir tantas funciones como sean necesarias

• Solo podemos sobreescribir una vez la función __autoload• Deben insertarse con spl_autoload_register

• Existen varias funciones spl_autololad* de ayuda• spl_ autoload_ call• spl_ autoload_ extensions• spl_ autoload_ functions• spl_ autoload_ register• spl_ autoload_ unregister

Page 22: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOP

Page 23: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPLimpiando datos - satinize

// PHP 5.2//Validar URLereg('^[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*([/?|&|=|;]?[a-zA-Z0-9_/-/%])*$',$url,$res))// Satinizar URLfilter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED));

//Validar Mailereg('(^[0-9a-zA-Z]+(\.[0-9a-zA-Z]+)*)@([0-9a-zA-Z]+(\.[0-9a-zA-Z]+)*\.[0-9a-zA-Z]{2,3})$',$mail,$res)//Satinizar Mailfilter_var($mail, FILTER_VALIDATE_EMAIL)

Page 24: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPPseudo polimorfismo

class poli{

public function suma(){

$ret = 0;switch(func_num_args()){

case 1 : $ret = func_get_arg(1);break;

case 2 : $ret = $this->suma2(func_get_arg(1),func_get_arg(2));break;

default : foreach(func_get_arg() as $a) $ret+= is_numeric($a)?$a:0;$ret = func_get_arg(1);Break;

}return $ret;

}}

Page 25: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPPseudoPolimorfismo

• Un método recoge las variables• Con func_num_args() sabe cuantas variables ha recibido• En función del numero de args decide a que método reenviar• Puedes acceder a todas las variables con func_get_args()• O solo a una con func_get_arg($i)

Page 26: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPSesiones en Bases de datos• Vale, esto no es de PHP5.3, pero seguro que no lo usáis.• Existe la función session_set_save_handler• Esta función recibe 6 argumentos

• $open → función similar al constructor• $close → función al destructor• $read → que sucede cuando se van a leer datos de sesión• $write → que sucede cuando se van a escribir datos• $destroy → que sucede con session_destroy()• $gc → recolector de basura•Normalmente tiene probabilidad 1/100–session.gc_probability–session.gc_divisor

Page 27: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPPseudo polimorfismo

static function main() {$class = get_called_class();

session_module_name('user');session_set_save_handler(

array($class, 'open'),array($class, 'close'),array($class, 'read'),array($class, 'write'),array($class, 'destroy'),array($class, 'gc')

);}static function open($save_path, $session_name, $persist = null)static function close()static function read($key)static function write($key, $oval)static function destroy($key)static function gc($maxlifetime)

Page 28: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPRecordar que no hay mejor manual que http://php.netOtras cositas que deberíais conocer• Magic Methods

• __construct / __destruct / __call / __callStatic• __get / __set / __isset / __unset / • __sleep / __wakeup• __toString

• SPL classes• DirectoryIterator• Phar (JAR para PHP)• Tricondicional simplificado

• $a = $b ? $b : $c; => $a = $b? : $c;• Y otra cosa más

Page 29: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

PHP del CGI al OOPY no os olvidéis de los try catch!

try {if (algo falla)throw new PWT_Exception(104, $classname);

} catch (PWT_Exception $e) {PWT_Notice::catchException($e);

}}

Page 30: Masterclass ADWE Madrid

Ángel Luis Quesada NietoCEO at Kubide.es

PHP 5.3 masterclass

Ya se acaba!!!

Developers! Lo conseguimos?#adwe_mad

Page 31: Masterclass ADWE Madrid

Título de la Conferencia

MUCHAS GRACIAS!!!!

Ángel Luis QuesadaCEO at Kubide

Twitter: @gelitoTwitter: @kubide_esPersonal Site: www.alquesada.comCompany: www.kubide.esMail: [email protected]