SlideShare una empresa de Scribd logo
PHP 5.3 masterclass
Desde el CGI al OOP




                      Ángel Luis Quesada Nieto
                              CEO 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




Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                                    Ahhmm!!!
                           Hoy competimos contra #comunicat
                           Developers! Consigamos ese TT!
                                   #adwe_mad

                                       @peppersanblai te queremos!




Ángel Luis Quesada Nieto
CEO 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



Ángel Luis Quesada Nieto
CEO 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>

Ángel Luis Quesada Nieto
CEO 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




Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                                     PHP en el tiempo
                     En 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
Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                                     PHP en el tiempo
                En 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

Ángel Luis Quesada Nieto
CEO 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


Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                           PHP en el tiempo




Ángel Luis Quesada Nieto
CEO 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 ¿?




Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                                  Os acordáis?!!
                           Hoy competimos contra #comunicat
                           Developers! Consigamos ese TT
                                   #adwe_mad

                                       @gersonbeltran te queremos!




Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                           PHP del CGI al OOP
                               Pasamos del date()


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




Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                                 PHP del CGI al OOP
                                        … al DateTime
                           <?php
                           try {
                               $date = new DateTime('2000-01-01');
                           } catch (Exception $e) {
                               echo $e->getMessage();
                               exit(1);
                           }

                           print $date->format('Y-m-d');
                           ?>
Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                                     PHP del CGI al OOP
                  Lo 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)
Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                           PHP del CGI al OOP




Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                              PHP del CGI al OOP
                                       index.php

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

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



Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                             PHP del CGI al OOP
                index.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
Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                             PHP del CGI al OOP
                           Bootstrap (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 = true
                                  self::setupProjectConf(); self::setupAutoload();
                                  self::setupEnvironment(); self::setupDatabase();
                                  self::setupLanguageEnvironment(); self::setupView();
                                } catch (Exception $e) {
                                  PWT_Notice::catchException($e);
                                }
Ángel Luis Quesada Nieto
CEO 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 path
                             spl_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);
Ángel Luis Quesada Nieto     }
CEO at Kubide.es           }
PHP 5.3 masterclass




                             PHP del CGI al OOP
               Autoload
               •    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
Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                           PHP del CGI al OOP




Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                            PHP del CGI al OOP
                               Limpiando datos - satinize
     // PHP 5.2
     //Validar URL
     ereg('^[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*([/?|&|=|;]?[a-zA-Z0-9_/-/%])*$',
     $url,$res))
     // Satinizar URL
     filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED));

     //Validar Mail
     ereg('(^[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 Mail
     filter_var($mail, FILTER_VALIDATE_EMAIL)




Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                                   PHP del CGI al OOP
                                       Pseudo 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;
                                  }
Ángel Luis Quesada Nieto
                                return $ret;
CEO at Kubide.es
                             }
                           }
PHP 5.3 masterclass




                             PHP del CGI al OOP
             PseudoPolimorfismo

             •   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)




Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                            PHP del CGI al OOP
               Sesiones 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
Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                                PHP del CGI al OOP
                                       Pseudo 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)
Ángel Luis Quesada Nieto   static   function   destroy($key)
CEO at Kubide.es           static   function   gc($maxlifetime)
PHP 5.3 masterclass




                            PHP del CGI al OOP
               Recordar que no hay mejor manual que http://php.net
               Otras 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
Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                              PHP del CGI al OOP
                            Y 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);
                         }
                       }




Ángel Luis Quesada Nieto
CEO at Kubide.es
PHP 5.3 masterclass




                               Ya se acaba!!!

                           Developers! Lo conseguimos?
                                 #adwe_mad




Ángel Luis Quesada Nieto
CEO at Kubide.es
Título de la Conferencia




   MUCHAS GRACIAS!!!!

       Ángel Luis Quesada
           CEO at Kubide

Twitter: @gelito
Twitter: @kubide_es
Personal Site: www.alquesada.com
Company: www.kubide.es
Mail: hola@kubide.es

Más contenido relacionado

PPTX
PHP Con symfony
PDF
Aplicaciones Web
PPT
T8 cgi applets...
PDF
Integración de CentOS 5.3, GlassFish,Liferay, OpenMRS y Alfresco
PPSX
Bd web
PPTX
Bases de datos de la web 3
PDF
ODP
Virtualziación de Sistema Operativo: la niña bonita sin novio
PHP Con symfony
Aplicaciones Web
T8 cgi applets...
Integración de CentOS 5.3, GlassFish,Liferay, OpenMRS y Alfresco
Bd web
Bases de datos de la web 3
Virtualziación de Sistema Operativo: la niña bonita sin novio

Similar a Masterclass PHP 5.3 (20)

PPTX
BilboStack - Php en el 2012
PDF
Masterclass ADWE Madrid
PDF
El futuro de PHP y Drupal
PDF
Curso Php
PDF
Webinar - Radiografía actual del lenguaje PHP
PPTX
Introducción a los Frameworks PHP
PDF
Swift sin hype y su importancia en el 2017
PPTX
.NET Core 1.0 y ASP.NET Core 1.0
PPTX
Python y la POO, en una clase, UNNe-Corrientes
PDF
Symfony2 Introducción
PDF
Desarrollando con PHP en Windows
ODP
Mariano Iglesias: Lithium - Un framework que pega como piña
PDF
Curso php desde_cero
PPTX
Lenguaje PHP
PDF
Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9
PDF
PHP en el 2015
PDF
Plataforma joomla
PPTX
Programacion iv sesion6 php
PDF
WordPress para programadores
BilboStack - Php en el 2012
Masterclass ADWE Madrid
El futuro de PHP y Drupal
Curso Php
Webinar - Radiografía actual del lenguaje PHP
Introducción a los Frameworks PHP
Swift sin hype y su importancia en el 2017
.NET Core 1.0 y ASP.NET Core 1.0
Python y la POO, en una clase, UNNe-Corrientes
Symfony2 Introducción
Desarrollando con PHP en Windows
Mariano Iglesias: Lithium - Un framework que pega como piña
Curso php desde_cero
Lenguaje PHP
Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9
PHP en el 2015
Plataforma joomla
Programacion iv sesion6 php
WordPress para programadores
Publicidad

Más de ADWE Team (20)

PDF
Frameworks para el desarrollo de juegos para dispositivo móviles
PPT
HTML5 + CSS3 + Wordpress = Responsive Web
KEY
HTML5 dia de internet 2012
PDF
Significado y usos de RSS
PPT
Responsive web y Wordpress
PDF
Git git hub
PDF
Introduccion html5
PPT
Ponencia seo para el èxito con google 2011 copia
PDF
Diseñar para dispositivos móviles
PDF
Potenciando tu web con APIs de Miquel Camps para ADWE Madrid
PDF
Presentacion de Fran Moreno para adwe
PDF
Rompiendo moldes
PDF
Gwt intro adwe_murcia
PDF
5 tips de diseñadores a maquetadores... y viceversa
PDF
Presentación Framework CodeIgniter
PDF
Presentación Extreme Programming
PDF
El momento del diseño, con Carlos Úbeda, de DNXGroup
PDF
Presentacion seo analisis
PPTX
Presentación de ACTO Framework parte I
PPTX
Presentación de ACTO Framework parte II
Frameworks para el desarrollo de juegos para dispositivo móviles
HTML5 + CSS3 + Wordpress = Responsive Web
HTML5 dia de internet 2012
Significado y usos de RSS
Responsive web y Wordpress
Git git hub
Introduccion html5
Ponencia seo para el èxito con google 2011 copia
Diseñar para dispositivos móviles
Potenciando tu web con APIs de Miquel Camps para ADWE Madrid
Presentacion de Fran Moreno para adwe
Rompiendo moldes
Gwt intro adwe_murcia
5 tips de diseñadores a maquetadores... y viceversa
Presentación Framework CodeIgniter
Presentación Extreme Programming
El momento del diseño, con Carlos Úbeda, de DNXGroup
Presentacion seo analisis
Presentación de ACTO Framework parte I
Presentación de ACTO Framework parte II
Publicidad

Último (20)

PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PDF
capacitación de aire acondicionado Bgh r 410
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PDF
CyberOps Associate - Cisco Networking Academy
PDF
Maste clas de estructura metálica y arquitectura
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
Influencia-del-uso-de-redes-sociales.pdf
PDF
clase auditoria informatica 2025.........
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
PPTX
Propuesta BKP servidores con Acronis1.pptx
PDF
MANUAL de recursos humanos para ODOO.pdf
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
TRABAJO DE TECNOLOGIA.pdf...........................
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
Historia Inteligencia Artificial Ana Romero.pptx
capacitación de aire acondicionado Bgh r 410
la-historia-de-la-medicina Edna Silva.pptx
CyberOps Associate - Cisco Networking Academy
Maste clas de estructura metálica y arquitectura
El-Gobierno-Electrónico-En-El-Estado-Bolivia
Influencia-del-uso-de-redes-sociales.pdf
clase auditoria informatica 2025.........
Presentacion de Alba Curso Auditores Internos ISO 19011
Propuesta BKP servidores con Acronis1.pptx
MANUAL de recursos humanos para ODOO.pdf
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
historia_web de la creacion de un navegador_presentacion.pptx
TRABAJO DE TECNOLOGIA.pdf...........................
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx

Masterclass PHP 5.3

  • 1. PHP 5.3 masterclass Desde el CGI al OOP Ángel Luis Quesada Nieto CEO at Kubide.es
  • 2. 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 Ángel Luis Quesada Nieto CEO at Kubide.es
  • 3. PHP 5.3 masterclass Ahhmm!!! Hoy competimos contra #comunicat Developers! Consigamos ese TT! #adwe_mad @peppersanblai te queremos! Ángel Luis Quesada Nieto CEO at Kubide.es
  • 4. PHP 5.3 masterclass Sobre el que habla AKA: • Ángel Luis Quesada Nieto • gelito • alquesada Mi proyecto actual: • Kubide • Advanced web Development • Developer Angels Ángel Luis Quesada Nieto CEO at Kubide.es
  • 5. 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> Ángel Luis Quesada Nieto CEO at Kubide.es
  • 6. 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 Ángel Luis Quesada Nieto CEO at Kubide.es
  • 7. PHP 5.3 masterclass PHP en el tiempo En 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 Ángel Luis Quesada Nieto CEO at Kubide.es
  • 8. PHP 5.3 masterclass PHP en el tiempo En 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 Ángel Luis Quesada Nieto CEO at Kubide.es
  • 9. 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 Ángel Luis Quesada Nieto CEO at Kubide.es
  • 10. PHP 5.3 masterclass PHP en el tiempo Ángel Luis Quesada Nieto CEO at Kubide.es
  • 11. 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 ¿? Ángel Luis Quesada Nieto CEO at Kubide.es
  • 12. PHP 5.3 masterclass Os acordáis?!! Hoy competimos contra #comunicat Developers! Consigamos ese TT #adwe_mad @gersonbeltran te queremos! Ángel Luis Quesada Nieto CEO at Kubide.es
  • 13. PHP 5.3 masterclass PHP del CGI al OOP Pasamos del date() <htm><body> Today is: <?php echo date(); ?> </body></html> Ángel Luis Quesada Nieto CEO at Kubide.es
  • 14. PHP 5.3 masterclass PHP del CGI al OOP … al DateTime <?php try { $date = new DateTime('2000-01-01'); } catch (Exception $e) { echo $e->getMessage(); exit(1); } print $date->format('Y-m-d'); ?> Ángel Luis Quesada Nieto CEO at Kubide.es
  • 15. PHP 5.3 masterclass PHP del CGI al OOP Lo 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) Ángel Luis Quesada Nieto CEO at Kubide.es
  • 16. PHP 5.3 masterclass PHP del CGI al OOP Ángel Luis Quesada Nieto CEO at Kubide.es
  • 17. PHP 5.3 masterclass PHP del CGI al OOP index.php <?php require_once ZonaSegura. "Bootstrap.php"; Bootstrap::main(); $con = new Controller(); $con->main(); print $con->toHTML(); ?> Ángel Luis Quesada Nieto CEO at Kubide.es
  • 18. PHP 5.3 masterclass PHP del CGI al OOP index.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 Ángel Luis Quesada Nieto CEO at Kubide.es
  • 19. PHP 5.3 masterclass PHP del CGI al OOP Bootstrap (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 = true self::setupProjectConf(); self::setupAutoload(); self::setupEnvironment(); self::setupDatabase(); self::setupLanguageEnvironment(); self::setupView(); } catch (Exception $e) { PWT_Notice::catchException($e); } Ángel Luis Quesada Nieto CEO at Kubide.es } }
  • 20. 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 path spl_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); Ángel Luis Quesada Nieto } CEO at Kubide.es }
  • 21. PHP 5.3 masterclass PHP del CGI al OOP Autoload • 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 Ángel Luis Quesada Nieto CEO at Kubide.es
  • 22. PHP 5.3 masterclass PHP del CGI al OOP Ángel Luis Quesada Nieto CEO at Kubide.es
  • 23. PHP 5.3 masterclass PHP del CGI al OOP Limpiando datos - satinize // PHP 5.2 //Validar URL ereg('^[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*([/?|&|=|;]?[a-zA-Z0-9_/-/%])*$', $url,$res)) // Satinizar URL filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED)); //Validar Mail ereg('(^[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 Mail filter_var($mail, FILTER_VALIDATE_EMAIL) Ángel Luis Quesada Nieto CEO at Kubide.es
  • 24. PHP 5.3 masterclass PHP del CGI al OOP Pseudo 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; } Ángel Luis Quesada Nieto return $ret; CEO at Kubide.es } }
  • 25. PHP 5.3 masterclass PHP del CGI al OOP PseudoPolimorfismo • 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) Ángel Luis Quesada Nieto CEO at Kubide.es
  • 26. PHP 5.3 masterclass PHP del CGI al OOP Sesiones 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 Ángel Luis Quesada Nieto CEO at Kubide.es
  • 27. PHP 5.3 masterclass PHP del CGI al OOP Pseudo 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) Ángel Luis Quesada Nieto static function destroy($key) CEO at Kubide.es static function gc($maxlifetime)
  • 28. PHP 5.3 masterclass PHP del CGI al OOP Recordar que no hay mejor manual que http://php.net Otras 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 Ángel Luis Quesada Nieto CEO at Kubide.es
  • 29. PHP 5.3 masterclass PHP del CGI al OOP Y 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); } } Ángel Luis Quesada Nieto CEO at Kubide.es
  • 30. PHP 5.3 masterclass Ya se acaba!!! Developers! Lo conseguimos? #adwe_mad Ángel Luis Quesada Nieto CEO at Kubide.es
  • 31. Título de la Conferencia MUCHAS GRACIAS!!!! Ángel Luis Quesada CEO at Kubide Twitter: @gelito Twitter: @kubide_es Personal Site: www.alquesada.com Company: www.kubide.es Mail: [email protected]