Diplomado Ti Sesion 1
-
Upload
mario-guillen-alvarez -
Category
Documents
-
view
16 -
download
0
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