►Características generales Características generales ►Configurar una plataforma PHP Configurar una plataforma PHP ►Configurar un entorno de desarrollo Configurar un entorno de desarrollo ►Anatomía del lenguaje y sintaxis Anatomía del lenguaje y sintaxis ►Extensiones y librerías Extensiones y librerías ►Ejemplo práctico: Portal de ocio Ejemplo práctico: Portal de ocio
Lerford en 1995 en 1995 Inicialmente un conjunto de Inicialmente un conjunto de scripts en Perl scripts en Perl La versión en C permitía La versión en C permitía acceder a BBDD acceder a BBDD Código fuente publico Código fuente publico Un poco de historia Un poco de historia
Perl Variables estilo Perl Embebido en HTML Embebido en HTML Interpretación de las variables de un formulario Interpretación de las variables de un formulario Cambio de nombre PHP/FI Cambio de nombre PHP/FI ►P Personal ersonal H Home ome P Page age ►F Forms orms I Interpreter nterpreter Un poco de historia Un poco de historia
en noviembre 1997 Ya tenia una comunidad de miles de usuarios Ya tenia una comunidad de miles de usuarios alrededor del mundo. alrededor del mundo. 50K dominios en todo el mundo (1% Internet) 50K dominios en todo el mundo (1% Internet) Mucha gente colaborando en el código Mucha gente colaborando en el código Casi todas sus versiones fueron BETA Casi todas sus versiones fueron BETA Un poco de historia Un poco de historia
en junio del 1998 Creada en 1997 y publica en junio del 1998 La primera versión que se asemeja a la actual La primera versión que se asemeja a la actual Creada por Andi Gutmans y Zeev Suraski Creada por Andi Gutmans y Zeev Suraski Andi, Zeev y Rasmus anunciaron PHP 3 como el Andi, Zeev y Rasmus anunciaron PHP 3 como el sucesor oficial de PHP/FI 2.0 sucesor oficial de PHP/FI 2.0 Creación de ZEND Creación de ZEND ZEND = ZEND = Ze Zeev + A ev + And ndi i Un poco de historia Un poco de historia
Del corazón a las extensiones Normalización de los nombres de funciones y Normalización de los nombres de funciones y constantes. constantes. Cambio en las siglas del acrónimo PHP Cambio en las siglas del acrónimo PHP En su pico, fue instalado en el 10% de los En su pico, fue instalado en el 10% de los servidores de Internet. servidores de Internet. Un poco de historia Un poco de historia
una reescritura 1998 se comenzó a desarrollar una reescritura de PHP, y se hizo publico en mayo del 2000. de PHP, y se hizo publico en mayo del 2000. Creación del Zend Engine a mediados de 1999 Creación del Zend Engine a mediados de 1999 Características destacables Características destacables ►Soporte para mas servidores Web Soporte para mas servidores Web ►Sesiones (frente a cookies) Sesiones (frente a cookies) ►Buffer de salida Buffer de salida ►Opciones de seguridad Opciones de seguridad 20% del uso en Internet 20% del uso en Internet Un poco de historia Un poco de historia
Lanzado en julio del 2004 Incluye el Zend Engine 2.0 Incluye el Zend Engine 2.0 Características principales Características principales ►Nuevo modelo de objetos Nuevo modelo de objetos ►Excepciones Excepciones ►Mas facilidades para trabajar con XML Mas facilidades para trabajar con XML Un poco de historia Un poco de historia
vs PHP 5 PHP 4 vs PHP 5 Type hinting: Forzar el tipo y metodo de un Type hinting: Forzar el tipo y metodo de un parametro. parametro. Todos los objetos son pasados por referencia. Todos los objetos son pasados por referencia. Constantes dentro de una clase. Constantes dentro de una clase. Clases: Abstractas, interfaces, constantes a nivel Clases: Abstractas, interfaces, constantes a nivel de clase, visibilidad de clase, visibilidad Nuevas extensiónes Nuevas extensiónes ►SimpleXML SimpleXML ►PDO PDO
vs PHP 5 PHP 4 vs PHP 5 Excepciones: Para el control de errores Excepciones: Para el control de errores Nuevo nivel de error_reporting: E_STRICT Nuevo nivel de error_reporting: E_STRICT ►Detecta código obsoleto Detecta código obsoleto
de scripting ►Ejecutado en el servidor Ejecutado en el servidor ►Open Source Open Source ►Especialmente diseñado para el desarrollo de Especialmente diseñado para el desarrollo de aplicaciones Web aplicaciones Web Apto para la línea de comandos Apto para la línea de comandos Aplicaciones graficas con PHP-GTK Aplicaciones graficas con PHP-GTK ►Combina la programación procedural y la Combina la programación procedural y la programación orientada a objetos. programación orientada a objetos.
► Aplicaciones Aplicaciones Web Web Línea de comando (tareas programadas, cron) Línea de comando (tareas programadas, cron) Aplicaciones de escritorio: PHP-GTK Aplicaciones de escritorio: PHP-GTK ► En la mayoría de sistemas operativos En la mayoría de sistemas operativos ► En la mayoría de servidores Web En la mayoría de servidores Web ► Generar dinámicamente Generar dinámicamente HTML HTML Imágenes Imágenes PDF PDF ZIP ZIP
con PHP? ►Abstracción de BBDD (PDO y ODBC) Abstracción de BBDD (PDO y ODBC) ►Comunicarse con otros protocolos Comunicarse con otros protocolos ►Procesar textos en distintos formatos Procesar textos en distintos formatos ►Otras funciones (compresión) Otras funciones (compresión)
con PHP? ►Acceder al hardware directamente (memoria Acceder al hardware directamente (memoria RAM, tarjeta gráfica, etc.) RAM, tarjeta gráfica, etc.) ►Programación de aplicaciones 3D Programación de aplicaciones 3D ►Etc… Etc…
con PHP? ►Convertir videos Convertir videos ►Editar audio Editar audio ►Algunas soluciones alternativas: Algunas soluciones alternativas: Hacer un puente entre PHP y otra tecnología Hacer un puente entre PHP y otra tecnología (ej: Java) (ej: Java) Escribir una extensión Escribir una extensión Invocar comandos del sistema operativo Invocar comandos del sistema operativo
se encuentra ►Espaguetti Espaguetti Poca separación de presentación y lógica Poca separación de presentación y lógica ►Código forzadamente OOP Código forzadamente OOP Sobre uso de clases y objetos Sobre uso de clases y objetos ►Objetivo: Balancear ambos paradigmas Objetivo: Balancear ambos paradigmas ►Usar patrones de diseño Usar patrones de diseño MVC MVC
tamaños Emprendimientos de todos los tamaños ►Grandes portales Grandes portales FaceBook FaceBook Digg Digg Wikipedia Wikipedia ►Proyectos Open Source Proyectos Open Source WordPress WordPress Drupal Drupal ►Etc. Etc.
►PHP respecto a Java PHP respecto a Java Requiere menos recursos del servidor Requiere menos recursos del servidor La curva de aprendizaje es muy exponencial La curva de aprendizaje es muy exponencial Sintaxis mas flexible Sintaxis mas flexible Mas joven Mas joven Tiempos de desarrollo menores Tiempos de desarrollo menores
PHP Development Environment PHP Development Environment Zend Studio Zend Studio Zend “Neon” Zend “Neon” ►“ “Simples” editores Simples” editores VIM VIM PHPEditor PHPEditor
►Combinación de código PHP, HTML, etc… Combinación de código PHP, HTML, etc… ►Opcionalmente, compuesto de uno o mas Opcionalmente, compuesto de uno o mas ficheros ficheros include (include_once) include (include_once) require (require_once) require (require_once)
para ser Como PHP fue diseñado para ser incorporado en el HTML, el interprete incorporado en el HTML, el interprete necesita distinguir entre código PHP y necesita distinguir entre código PHP y etiquetas HTML. etiquetas HTML. ►Los tags mas comunes son: Los tags mas comunes son: Apertura: <?php Apertura: <?php Cierre: ?> Cierre: ?>
el Mientras que el estilo completo es el recomendado, también hay otras opciones recomendado, también hay otras opciones <script language=“php”></script> <script language=“php”></script> <% %> <% %> <? ?> <? ?>
Los tags cortos son bastante populares, pero pueden ser deshabilitados (para evitar pero pueden ser deshabilitados (para evitar problemas con XML) problemas con XML) <? echo ‘hola’; ?> <? echo ‘hola’; ?> <?= ‘hola’; ?> <?= ‘hola’; ?> ►Ambos juegos de tags pueden ser Ambos juegos de tags pueden ser deshabilitados usando la directiva deshabilitados usando la directiva short_open_tag en el php.ini short_open_tag en el php.ini
Conclusión: Usa los tags largos para asegurar que tu aplicación será fácilmente asegurar que tu aplicación será fácilmente portable a múltiples servidores u opciones portable a múltiples servidores u opciones de configuración. de configuración.
comentan su código, PHP permite varias formas de código, PHP permite varias formas de hacerlo: hacerlo: // esta es una línea // esta es una línea # Esta también # Esta también /* /* múltiples líneas múltiples líneas */ */
proveen un contenedor de datos. datos. ►Reglas para nombrar una variable Reglas para nombrar una variable Pueden solo contener letras, números o _ Pueden solo contener letras, números o _ Deben comenzar con una letra o _ Deben comenzar con una letra o _
Aunque las variables de PHP son de tipo aparentemente indefinido son almacenadas aparentemente indefinido son almacenadas y manejadas en uno de los tipos internos de y manejadas en uno de los tipos internos de PHP PHP Escalares: boolean, string, integer, float Escalares: boolean, string, integer, float Compuestos: array, object Compuestos: array, object Tipos especiales: resource, null Tipos especiales: resource, null
de Strings: Un string es una cadena de caracteres. caracteres. ►Cada carácter ocupa un byte de memoria. Cada carácter ocupa un byte de memoria. Por esto PHP no tiene soporte para juegos Por esto PHP no tiene soporte para juegos de caracteres de múltiples bytes. de caracteres de múltiples bytes. ►Esto cambia con PHP 6. Esto cambia con PHP 6. ►No hay limites en la longitud. No hay limites en la longitud.
cadenas de texto pueden ser encerradas de tres maneras. de tres maneras. ‘’ – ‘’ – Comillas simples, estas cadenas son Comillas simples, estas cadenas son mostradas tal cual son mostradas tal cual son “” – “” – Comillas dobles, variables y secuencias de Comillas dobles, variables y secuencias de escape son reemplazadas por su valor escape son reemplazadas por su valor
dobles, pero permite Similar a las comillas dobles, pero permite múltiples líneas, y no necesita proteger las múltiples líneas, y no necesita proteger las comillas. comillas. echo <<<TEST echo <<<TEST Hola mundo. Hola mundo. Esto es “HEREDOC”. Esto es “HEREDOC”. TEST; TEST;
representar valores muy grandes o pequeños. muy grandes o pequeños. A = 1.123 A = 1.123 B = 1.2e3 (1200) B = 1.2e3 (1200) C = 7e-10 (0.00000007) C = 7e-10 (0.00000007)
Pueden contener cualquier tipo de variable, incluso otros arrays incluso otros arrays ►Tipos de índice Tipos de índice Numéricos Numéricos Asociativos Asociativos ►Se pueden usar como pilas o colas Se pueden usar como pilas o colas ►Decenas de funciones para operar Decenas de funciones para operar
►Frecuentemente utilizados en BBDD Frecuentemente utilizados en BBDD ►Numericos Numericos Tienen un índice numero, auto asignado, o Tienen un índice numero, auto asignado, o asignado por el usuario asignado por el usuario ►Asociativos Asociativos Tienen un índice de tipo string; similar a un Tienen un índice de tipo string; similar a un hashmap hashmap
No tiene valor de retorno en su declaración Facilitan el mantenimiento Facilitan el mantenimiento Evitan la duplicación de código Evitan la duplicación de código ►Aceptan numero variable de parámetros Aceptan numero variable de parámetros ►Pueden ser definidas dentro de otra función Pueden ser definidas dentro de otra función
de fecha y hora Date Date ►Para trabajar con strings Para trabajar con strings Strlen Strlen Substr Substr ►Envio de emails Envio de emails mail mail
funciones en un Permiten combinar datos y funciones en un sola unidad lógica sola unidad lógica ►A partir de la versión 5 de PHP aparecen: A partir de la versión 5 de PHP aparecen: Clases abstractas Clases abstractas Interfaces Interfaces Type hinting Type hinting
propiedades y métodos métodos ►Public: La propiedad o método puede ser accedida Public: La propiedad o método puede ser accedida desde cualquier sitio. desde cualquier sitio. ►Private: La propiedad o método solo puede ser Private: La propiedad o método solo puede ser accedida por su clase accedida por su clase ►Protected: La propiedad o método solo puede ser Protected: La propiedad o método solo puede ser accedida por la clase o sus derivadas accedida por la clase o sus derivadas ►Final: la propiedad o método no puede ser Final: la propiedad o método no puede ser sobrescrita sobrescrita
recurso es una variable especial que representa un identificador de mas bajo representa un identificador de mas bajo nivel (como un fichero, una conexión a nivel (como un fichero, una conexión a bbdd, etc) bbdd, etc) ►La función que crea una variable de tipo La función que crea una variable de tipo resource, generalmente ofrece otra función resource, generalmente ofrece otra función que libera los recursos consumidos por esa que libera los recursos consumidos por esa variable. variable.
valor Es una variable que no tiene tipo ni valor ►No es lo mismo que el entero 0 o que la No es lo mismo que el entero 0 o que la cadena vací cadena vací
un identificador especial que no puede ser cambiado una especial que no puede ser cambiado una vez creado vez creado ►Función define() Función define()
de error de la expresión Elimina los mensajes de error de la expresión ►`` (backticks) `` (backticks) Ejecutan el contenido como un comando de Ejecutan el contenido como un comando de shell shell ►Instanceof Instanceof Devuelve true si la variable es de tipo class y es Devuelve true si la variable es de tipo class y es una subclase o subinterface una subclase o subinterface
porque se ejecuta con los Puede ser peligroso porque se ejecuta con los mismos permisos que el webserver. mismos permisos que el webserver. ►Instanceof Instanceof Es útil para verificar que la variable pasada Es útil para verificar que la variable pasada como parámetro se corresponde con el tipo como parámetro se corresponde con el tipo esperado. esperado.
del script. Exit: detiene la ejecución del script. ►Puede, opcionalmente, devolver un mensaje Puede, opcionalmente, devolver un mensaje o código de error. o código de error. exit(-1); exit(-1); exit(‘algo fue mal’); exit(‘algo fue mal’);
enviada como parámetros en la Información enviada como parámetros en la URL URL Limite del tipo y longitud de datos enviados Limite del tipo y longitud de datos enviados ►POST POST Datos enviados junto a los encabezados Datos enviados junto a los encabezados Información oculta Información oculta Permite subir contenidos “multipart” Permite subir contenidos “multipart”
de un formulario Subiendo ficheros a través de un formulario Variables involucradas Variables involucradas ►$_POST $_POST ►$_FILES $_FILES Funciones a utilizar Funciones a utilizar ►is_uploaded_file is_uploaded_file ►move_uploaded_file move_uploaded_file
de un usuario Permiten recordar la sesión de un usuario ►Posible de almacenar Posible de almacenar En el sistema de fichero En el sistema de fichero En memoria En memoria En la URL En la URL En cookies En cookies
Data Objects PHP Data Objects Para conectarse a diferentes BBDD a través de Para conectarse a diferentes BBDD a través de una única interfaz una única interfaz API orientada a objetos API orientada a objetos Similar al JDBC de Java Similar al JDBC de Java
►Orientada a objetos Orientada a objetos ►Gratuita Gratuita ►Fácilmente configurable Fácilmente configurable ►Multitud de gráficos Multitud de gráficos