Diplomado Ti Sesion 1

44
Desarrollo de aplicaciones Web Luis Montealegre Vázquez (@MontealegreLuis)

Transcript of Diplomado Ti Sesion 1

  • Desarrollo de aplicaciones Web

    Luis Montealegre Vzquez (@MontealegreLuis)

  • Marzo 2014 Aplicaciones Web 2

    Comunidad PHP Puebla

    http://twitter.com/ComPHPPueblahttp://facebook.com/ComPeHPPuebla

    http://github.com/ComPHPPuebla https://plus.google.com/+Comunidadphppuebla/ https://www.youtube.com/user/ComPHPPuebla/http://www.comunidadphppuebla.com

  • Marzo 2014 Aplicaciones Web 3

    PHP POO (Programacin Orientando a Objetos)

    La POO es un paradigma de programacin que utiliza objetos e interacciones en el diseo de un sistema.

    Vocabulario de programacin orientada a objetos: Clase: Una clase es un modelo que se utiliza para crear objetos

    que comparten un mismo comportamiento, estado e identidad. Objeto: Es una entidad provista de mtodos o mensajes a los

    cuales responde (comportamiento); Mtodo: Es el algoritmo asociado a un objeto que indica la

    capacidad de lo que ste puede hacer. Instanciar: Es la accion para la creacin de una clase u objeto. Propiedad: Es una variable que pertenece a un objeto.

  • Marzo 2014 Aplicaciones Web 4

    Introduccin

    Revisin de la primera parte de la pltica Don't be STUPID grasp SOLID de Anthony Ferrara

    http://www.slideshare.net/ircmaxell/dont-be-stupid-grasp-solid

  • Marzo 2014 Aplicaciones Web 5

    Clases y Objetos

    La definicin bsica de clases comienza con la palabra clave class, seguido por un nombre de clase, continuado por un par de llaves que encierran las definiciones de las propiedades y mtodos.

    class NombreDeMiClase {

    #... } PSR- 1: http://www.php-fig.org/psr/psr-1/

  • Marzo 2014 Aplicaciones Web 6

    Clases y Objetos Una vez que las clases han sido declaradas, ser necesario crear los

    objetos y utilizarlos. Para instanciar un objeto, solo es necesario utilizar la palabra new. El objeto ser asignando a una variable (la cual, adoptar la forma de objeto).

    class Persona { #...

    } $persona = new Persona();

  • Marzo 2014 Aplicaciones Web 7

    Modificadores de acceso (Mtodos y propiedades)

    Modificador public: Es el nivel de acceso ms permisivo.En este caso se puede acceder a ese atributo/mtodo, por cualquier otro elemento de nuestro programa.

    class Dado { public $puntos; public function tirar() {

    //... } } $dado = new Dado();

  • Marzo 2014 Aplicaciones Web 8

    Modificadores de acceso (Mtodos y propiedades)

    Modificador private: Es el nivel de acceso ms restrictivo. Sirve para indicar que esa variable slo se va a poder acceder desde el propio objeto, nunca desde fuera.

    class Dado { private $puntos; private function tirar()

    { //... } public function damePuntuacion() { return $this->puntos; } } $dado = new Dado();

  • Marzo 2014 Aplicaciones Web 9

    Modificadores deAcceso (Mtodos y propiedades)

    Modificador protected: Este indica un nivel de acceso medio. Un elemento protected es pblico dentro de la propia clase y en sus heredadas y privado en cualquier otro caso.

  • Marzo 2014 Aplicaciones Web 10

    Mtodos Mgicos Los nombres de mtodos mgicos en las clases PHP, no se pueden usar a

    menos que se desee la funcionalidad mgica asociada a estos. __construct: Este mtodo se llama automticamente cuando se crea un

    nuevo objeto. class BaseClass { function __construct() { echo "En el constructor BaseClass\n"; } } $obj = new BaseClass();

  • Marzo 2014 Aplicaciones Web 11

    Mtodos Mgicos __call(): Este mtodo nos permite controlar el comportamiento cuando llamamos a un

    mtodo que no existe en un objeto. Recibe dos parmetros: el nombre del mtodo que se desea invocar y un arreglo con sus parmetros

    class MethodTest { public function __call($name, $arguments) { echo "Llamando al mtodo de objeto '$name' "

    . implode(', ', $arguments). "\n"; } } $obj = new MethodTest();

  • Marzo 2014 Aplicaciones Web 12

    Mtodos Mgicos __get(): Este mtodo se llama cuando un cdigo intenta acceder a una propiedad que no existe o no es

    accesible. Acepta un argumento, que es el nombre de la propiedad. Debe retornar un valor, el cual ser tratado como el valor de la propiedad.

    class Empleado { private $nombre = "Pablo"; public function __get($propiedad) { if(isset($this->$propiedad)) { return $this->$propiedad; } return null; } } $e = new Empleado(); echo $e->nombre;

  • Marzo 2014 Aplicaciones Web 13

    Mtodos Mgicos __set(): Este mtodo mgico es llamado cuando se intenta modificar el valor de una

    propiedad que no es accesible o no existe. Acepta dos argumentos, que son: el nombre de la propiedad y el valor.

    class PropertyTest { private $data = array(); public function __set($name, $value) { echo "Estableciendo '$name' a '$value'\n"; $this->data[$name] = $value; } } $obj = new PropertyTest();

  • Marzo 2014 Aplicaciones Web 14

    Mtodos Mgicos __toString(): El mtodo __toString() permite a una clase decidir cmo comportarse cuando se le trata como

    un string.Este mtodo debe devolver un string, si no se emitir un nivel de error fatal. class TestClass { public $foo; public function __construct($foo) { $this->foo = $foo; } public function __toString() { return $this->foo; } } $class = new TestClass('Hola Mundo'); echo $class;

  • Marzo 2014 Aplicaciones Web 15

    Type Hinting Desde PHP 5 se incorpora la implicacin de

    tipos. Ahora, las funciones pueden obligar a sus parmetros a que sean objetos.

    Si se especifica una clase o una interfaz como tipo implicado, tambin estarn permitidos todos sus hijos o implementaciones.

    La implicacin de tipos no puede usarse con tipos escalares como int o string. Tampoco estn permitidos los resources y traits.

  • Marzo 2014 Aplicaciones Web 16

    Type Hinting public function ship(Parcel $parcel) { return true; } class UseProducts {

    public function __construct() {

    $appleSauce=new FruitStore(); $orangeJuice=new CitrusStore(); $this->doInterface($appleSauce); $this->doInterface($orangeJuice);

    } function doInterface(IProduct $product) {

    echo $product->apples(); echo $product->oranges();

    } } $worker=new UseProducts();

  • Marzo 2014 Aplicaciones Web 17

    Namespaces A partir de PHP 5.3 , PHP ha tenido soporte para

    namespaces. Hay dos objetivos principales de esta nueva caracterstica. El primero es evitar la necesidad de clases con nombres como Zend_InfoCard_Xml_Security_Transform_Exception

    El segundo objetivo es proporcionar una manera fcil de aislar clases y funciones de diversas bibliotecas.

    Los namespace se declaran en la parte superior de un archivo, y se aplican a todas las clases, funciones y constantes presentes en ese fichero

  • Marzo 2014 Aplicaciones Web 18

    Namespaces namespace shipping; class Courier {

    public $name; public $home_country; public static function getCouriersByCountry($country) {

    return $courier_list; }

    }

  • Marzo 2014 Aplicaciones Web 19

    Autoloading Autoloading es cuando le decimos a PHP

    donde buscar nuestros clases cuando necesita una declaracin de clase que se utilizar.

    Para definir las reglas para la carga automtica de clases, se puede definir una funcin global __autoload() que es automticamente invocada en caso de que se est intentando utilizar una clase/interfaz que todava no haya sido definida.

  • Marzo 2014 Aplicaciones Web 20

    Autoloading function __autoload($classname) {

    include strtolower($classname) . '.php';

    }$obj = new MiClase1();

    $obj2 = new MiClase2();

    PSR-0: http://www.php-fig.org/psr/psr-0/

  • Marzo 2014 Aplicaciones Web 21

    Autoloading (SPL) La SPL (Standard PHP Library) hace frente a

    la carga automtica de una mejor manera. En lugar de tener una funcin global __ autoload( ) en la que se pueden usar varios autoloaders los cuales se almacenan en una cola de autoloaders.

  • Marzo 2014 Aplicaciones Web 22

    Callbacks Un callback es una funcin/mtodo que es ejecutada por otra funcin/mtodo.

    class MyClass { public $property = 'Hello World!'; public function MyMethod() { call_user_func([$this, 'myCallbackMethod']); } public function MyCallbackMethod() { echo $this->property; } }

  • Marzo 2014 Aplicaciones Web 23

    Autoloading (SPL) spl_autoload_register: Esta funcin agrega un nuevo autoloader a la cola de

    autoloading. Cuando se requiera cargar la definicin de una clase PHP recorrer la cola de autoloaders para cargarla.

    function my_autoload ($className) { include(__DIR__ . "/" . $pClassName . ".php"); } class Autoloader {

    public function autoload($className) { include(__DIR_ . '/src/' . $className); }

    } spl_autoload_register("my_autoload"); spl_autoload_register([new Autoloader(), 'autoload']);

  • Marzo 2014 Aplicaciones Web 24

    Objetos Callable __invoke(): El mtodo __invoke() es llamado cuando un script intenta

    llamar a un objeto como si fuera una funcin.

    class CallableClass { public function __invoke($x) { var_dump($x); } } $obj = new CallableClass; $obj(5);

  • Marzo 2014 Aplicaciones Web 25

    Herencia y Polimorfismo La herencia es uno de los pilares

    fundamentales de la POO, consiste en la definicion de una clase a partir de otra existente, asi esta nueva clase se le llama clase extendida o clase derivada.

    La importancia de la herencia reside en que cuando creamos una clase extendida, esta a su vez hereda todos los metodos y propiedades de su clase base, pudiendo a su vez implementar otros metodos o propiedades exclusivos de nuestra clase extendida.

  • Marzo 2014 Aplicaciones Web 26

    Herencia y Polimorfismo class ClassBD { } class ClassCatalogo extends ClassBD { }

  • Marzo 2014 Aplicaciones Web 27

    Herencia y Polimorfismo El polimorfismo, como su nombre indica,

    sugiere multiples formas. En programacin cuando hablamos de polimorfismo nos referimos a la capacidad de acceder a multiples implementaciones a travs de la misma interfaz. Es decir que un mismo identificador, o funcin pueda tener diferentes comportamientos en funcion del contexto en el que sea ejecutado.

  • Marzo 2014 Aplicaciones Web 28

    Herencia y Polimorfismo class classPoligono { function calculo() { echo 'El area depende del tipo de poligono'; } } class classCuadrado extends classPoligono { function calculo() { echo 'area de un cuadrado : a=l*l'; } } class classRectangulo extends classPoligono { function calculo() { echo 'area de un rectangulo : a=b*h'; } } class classTriangulo extends classPoligono { function calculo() { echo 'area de un triangulo : a=(b*h)/2';} }

  • Marzo 2014 Aplicaciones Web 29

    Interfaces El punto sobresaliente sobre las interfaces es que son

    elementos estructurales importantes en la POO.

    interface CanBeSwitched {

    public function on() { } public function off() { }

    }

  • Marzo 2014 Aplicaciones Web 30

    Interfaces Para implementar una interfaz , utilice la sentencia

    implements.

    class Lamp implements CanBeSwitched {

    public function on() { } public function off() { }

    }

  • Marzo 2014 Aplicaciones Web 31

    Excepciones Las excepciones son objetos. Exception es

    la clase en PHP que contiene cuando ocurri un error (el nombre de archivo y nmero de lnea), un mensaje de error, y (opcionalmente) un cdigo de error

  • Marzo 2014 Aplicaciones Web 32

    Excepciones (throw) Una excepcin se lanza a travs de la palabra

    reservada thrown. function foo() { throw new Exception ('Upps !!'); } foo();

  • Marzo 2014 Aplicaciones Web 33

    Excepciones (try/catch) Dentro de try se encuentra el cdigo que se procesar,

    en caso de que ocurra una excepcin, el bloque catch, atrapar la excepcin

    try { //mis argumentos para procesar } catch(Exception $e) { //procedimiento en caso de reportar errores

    }

  • Marzo 2014 Aplicaciones Web 34

    Excepciones (finally) El bloque finally se ejecuta, sin importar si ocurre o no una excepcin

    dentro de un bloque try. function foobar() {

    try { $a = 42; return $a;

    } catch (Exception $e) {| print "Exception!\n";

    } finally { print "Finally called!\n";

    } return -1;

    } print foobar();

  • Marzo 2014 Aplicaciones Web 35

    Exception handlers y error handlers

    La funcin set_exception_handler() Establece una funcin de gestin de excepciones definida por el usuario. Por lo general, se ver un mensaje de error como:

    Fatal error: Uncaught exception 'Exception' in file.php:2

    Stack trace: #0 {main} thrown in file.php on line 2

  • Marzo 2014 Aplicaciones Web 36

    Exception handlers y error handlers

    function exception_handler($exception) { echo "Uncaught exception: " , $exception->getMessage(), "\n"; } set_exception_handler('exception_handler'); throw new Exception('Uncaught Exception'); echo "Not Executed\n";

  • Marzo 2014 Aplicaciones Web 37

    Exception handlers y error handlers

    Es posible definir una funcin para el manejo de cualquier error. Esta funcin debe ser capaz de manejar un

    mnimo de dos parmetros (nivel de error y mensajes de error) pero puede aceptar hasta cinco parmetros (opcionalmente: archivo, nmero de lnea, y el contexto de error).

    Una vez definido el controlador de errores personalizado es necesario establecerlo como predeterminado con la funcin set_error_handler

  • Marzo 2014 Aplicaciones Web 38

    Exception handlers y error handlers

    set_error_handler: Esta funcin define la forma de manejar los errores en tiempo de ejecucin.

    class CallbackClass { function CallbackClass() { set_error_handler([$this, 'CallbackFunction']); } function CallbackFunction() { // refers to $this } }

  • Marzo 2014 Aplicaciones Web 39

    Lambda Las funciones lambda son funciones

    annimas (sin un nombre) que se pueden definir en cualquier momento.

    Las funciones lambda son tiles para una serie de casos, sobre todo para muchas funciones de PHP que aceptan un callback

    Una de esas funciones es array_map (), que nos permite caminar a travs de un arreglo aplicando un callback a cada elemento del arreglo

  • Marzo 2014 Aplicaciones Web 40

    Lambda $result = function($var) { return $var .= ' World!'; }; echo $result('Hello');

  • Marzo 2014 Aplicaciones Web 41

    Closures Los closures son como funciones lambda , pero

    ms inteligentes en el sentido de que tienen la capacidad de interactuar con variables fuera del lugar donde se definieron

    $string = "Hello World!"; $closure = function() use ($string) { echo $string; }; $closure();

  • Marzo 2014 Aplicaciones Web 42

    Traits El objetivo de un trait es el de reducir las

    limitaciones propias de la herencia simple permitiendo que se reutilicen a voluntad un conjuntos de mtodos sobre varias clases independientes y pertenecientes a clases jerrquicas distintas

    Un Trait es similar a una clase, pero con el nico objetivo de agrupar funcionalidades muy especficas y de una manera coherente

  • Marzo 2014 Aplicaciones Web 43

    Traits

    trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; } class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; }

  • Marzo 2014 Aplicaciones Web 44

    Gracias

    Preguntas?

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44