SlideShare ist ein Scribd-Unternehmen logo
1 von 75
Introducción a PHP
Jose Emilio Labra Gayo
Depto. Informática
Universidad de Oviedo
Historia de PHP
1995: Personal Home Page/Forms Interpreter, por Rasmus Lerdorf
Controlar nº accesos a su currículum vitae
Conjunto de programas en C
Liberado al dominio público
1997: PHP/FI 2.0, PHP 3.0. Zeev Suraski y Andi Gutmans
Renombrado a PHP: Hypertext Preprocessor
Nuevas características: Módulos, objetos
2000: PHP 4.0
Nuevo motor llamado Zend, soporte a nuevos servidores
2004: PHP 5.0
Zend Engine 2.0
Mejor soporte para POO
Integración con modelos OO externos (COM, Java)
Gestión de excepciones
Se inicia PHP 6 pero se mantiene en PHP 5.4 (2012)
2013: PHP 5.5, HipHop Virtual Machine (facebook)
2014: PHP 5.6
Rasmus Lerdorf
Creador PHP
Ecosistema PHP
Página oficial: http://php.net/
Editores: Eclipse, PHPStorm
Estilo: http://www.phptherightway.com/
Gestión de paquetes: PEAR, Composer
Recomendado: XAMPP
Ejecución: php
Interactivo:
php -a: no funciona en Windows
phpsh
Incrustación en páginas Web (I)
Código PHP está dentro de una página HTML
El servidor interpreta el código
DESPUÉS de interpretarlo, servidor devuelve resultado
Secuencia de escape: Indicar dónde empieza y acaba el código
Varias opciones:
<? código PHP ?>
<script language="php"> código PHP </script>
<?php código PHP ?>
<% código PHP %>
hola.php
<html>
<head>
<title>Hola</title>
</head>
<body>
<h1>Fecha: <?= date("d.m.y")?></h1>
<?php
if (date ("d") % 2 == 0) {
echo "Hoy es un día par";
} else {
echo "Hoy es un día impar";
}
?>
</body>
</html>
Hola Mundo
Elementos básicos
Separador de instrucciones: punto y coma ;
Mayúsculas/minúsculas
Identificadores y nombres de variables: Se distinguen
Es diferente $nombre de $Nombre
Nombres de funciones: No se distinguen
Es lo mismo: print_r, Print_r
Nota: Cierre de la secuencia de escape, ?>, implica separación de
instrucciones. y en este caso no hace falta el ;
Comentarios
Comentarios: Estilo C, C++ y shell
Varias líneas estilo Java:
/* Esto es un comentario
*/
En línea estilo Java:
// Esta línea es un comentario
En línea estilo shell
# Esta línea es un comentario
NOTA: Los comentarios “de línea” se dan por finalizados cuando
llega un cierre de la secuencia de escape
Los comentarios no afectan al HTML:
// Esto no se ve ?> Esto sí se ve
Identificadores
Comienza por letra o _, seguido de alfanuméricos y/o
subrayados
Reglas habituales en otros lenguajes de
programación
Distingue mayúsculas y minúsculas
En este caso, “letra” incluye los caracteres ASCII de 7F a FF
(de 127 a 255). Por tanto, se pueden usar vocales
acentuadas y demás
NOTA: Convención habitual: snake_case
Ejemplo: mysql_affected_rows
Variables
Siempre van precedidas por símbolo $
$nombre
No se especifica el tipo
$edad = 21;
No es necesario declarar las variables
NOTA:
No hay chequeo estático de tipos  Errores en tiempo de ejecución
Variables
Variables variables ($$)
Asignación por referencia (&)
Eliminar una variable: unset
$uno = "saludo";
$$uno = "adios";
echo $saludo; // escribe "adios"
$x = 1 ;
$r = & $x; // r es una referencia a x
$x = 2 ; // cambia el valor de x
echo $r; // imprime 2
Ámbito de una variable
Ámbito (Scope) = contexto en el que está definida
Si la variable se declara en una función, su ámbito es local a
esa función
Una variable local oculta una variable global con el mismo
nombre
$x = 1; // variable global
function f() {
$x = 2 ; // variable local
}
f();
echo $x; // imprime 1
Ámbito global
global permite acceder a la variable global
$x = 1;
function f() {
global $x ; // $x se refiere a la x externa
$x = 2 ;
}
f();
echo $x; // imprime 2
Nota: también puede usarse el array GLOBALS para acceder a variables globales
$GLOBALS["x"] = 2 ;
Variables estáticas
Retienen su valor entre llamadas a una función
Sólo son visibles dentro de dicha función
$x = 10;
function cuentaLlamadas() {
static $x = 0;
$x++;
echo "Llamada $x";
}
cuentaLlamadas(); // escribe Llamada 1
cuentaLlamadas(); // escribe Llamada 2
echo $x; // escribe 10
Ejercicios PHP
Utilizando PHPUnit, implementar:
par($n): chequea que un nº es par
factorial($n): calcula el factorial de un nº
https://gist.github.com/labra/942032f1bae1686f5d09
Tipos de datos
8 tipos primitivos
Escalares
boolean, integer, float, string
Complejos
array
object
Especiales
Resource
NULL
Booleanos y Números
Boolean: TRUE ó FALSE
Valores Null, 0, "", 0.0, arrays vacíos, objetos vacíos = false
Enteros
No hay unsigned.
Tamaño dependiente de plataforma.
Notación octal (empezar en 0)
Hexadecimal (empezar en 0x)
Binaria (empieza por 0b)
Flotantes
Válida notación científica
Tamaño dependiente de plataforma.
Strings
Comillas simples: 'Hola amigo'
 como carácter de escape sólo para ' y 
" se trata como un carácter más
Las variables NO se interpretan
Comillas dobles: "Hola n amigo"
 como carácter de escape en: n, r, t, $...
Las comillas dobles internas deben precederse con 
Las variables SÍ se interpretan.
Cadenas heredoc
Bloque de texto entre <<<identificador y otra aparición de
identificador $poema = <<< Fin
Esto es una cadena
con dos líneas
Fin;
$nombre = "Juan" ;
$saludo ="Hola $nombre";
Arrays
Array = mapa ordenado de objetos
Se crean mediante array()
Se accede mediante []
Recorrido mediante foreach
2 tipos:
Arrays indexados: clave = entero
Arrays asociativos: clave = String
Arrays indexados
Clave = enteros
Comienza por 0
$personas = array("juan","luis","ana");
print($personas[1]); // luis
$personas[3] = "pepe"; // Inserta un valor en posición 3
$personas[] = "kiko"; // Inserta valor al final
foreach($personas as $p) {
echo $p . " ";
}
Arrays asociativos
Clave = String
$nota = array("juan" => 5.5, "luis" => 8.5);
print($nota['luis']); // 8.5
foreach($nota as $p => $n) {
echo "$p tiene un $n";
}
Arrays
Internamente son todo arrays asociativos
Las claves pueden ser enteros o strings
Los valores pueden ser de cualquier tipo
$cosas = array("pepe",2,array(2,3));
foreach ($cosas as $c) {
var_dump($c);
}
array(3) { [0] => string(4) "pepe"
[1] => int(2)
[2] => array(2) { [0]=> int(2)
[1]=> int(3)
}
}
Arrays multidimensionales
Arrays cuyos valores son arrays
$matriz = array(array(4,5),
array(8,2),
array(3,6));
for ($i = 0; $i < count($matriz); $i++) {
$fila = $matriz[$i];
for ($j = 0; $j < count($fila); $j++) {
echo "($i,$j)=$fila[$j] ";
}
echo "n";
}
(0,0)=4 (0,1)=5
(1,0)=8 (1,1)=2
(2,0)=3 (2,1)=6
Recursos
El tipo de datos Resource referencia un recurso externo
Cuando no hay más referencias a un recurso se libera
automáticamente
function search() {
$res = database_connect();
database_query($res);
}
Sistema de tipos
Sistema de tipos dinámico
Modificación de tipo al vuelo
Existe ahormado al estilo C.
Algunas funciones útiles:
var_dump : Tipo y valor de una expresión
gettype: Obtener representación legible del tipo
is_tipo: Comprobar tipo: (is_int, is_string, etc.)
$n = 10; // $n es integer
$b = (boolean) $n; // $b es boolean
$edad = 21; // $edad es entera
$edad = "Joven"; // $edad es String
Constantes globales
Se crean usando la función define()
Su valor no puede alterarse ni pueden redefinirse
Ámbito global
Sólo existen constantes de los tipos escalares
Hay muchas constantes predefinidas
Dependen de módulos disponibles
Si se usa una constante no definida, se define sobre la
marcha y su valor será un string con su nombre
define('ALTURA_MAXIMA',200);
echo ALTURA_MAXIMA; // se referencian sin comillas
Operadores
Aritméticos: +, -, *, /, %
Asignación =
Combinado para todos los aritméticos y strings (+=, .=)
Bits: &, |, ^, ~, <<, >>
Con Strings, operan sobre los bytes de los caracteres
Lógicos:
and, or, xor, !, &&, ||
Comparación:
==,===,!=,<>,!==,<,>,<=,>=,?:
Incremento: --, ++ (pre y postfijo)
Operadores
Concatenación de Strings: . y .=
Control de errores: @ (variable $php_errormsg)
Ejecución: ` ... ` (acento grave).
Ejecuta algo en el SO y la salida es el valor de la expresión.
Estructuras de control
Condicional
if (condición) {
sentencias;
} else {
sentencias;
}
if (condición) {
sentencias;
}
if (condición) {
sentencias;
} elseif (condición2) {
sentencias;
} else {
sentencias;
}
Operador condicional ?
(condición)? valor1 : valor2
Sentencia if
Sintaxis alternativa
if (condición):
sentencias;
else:
sentencias;
endif;
La sintaxis alternativa es muy útil cuando se mezcla con HTML
<?php if ($usuario_ok) :?>
<p>Usuario registrado ?></p>
<?php else: ?>
<p>Usuario no válido ?> </p>
<?php endif ?>
Puede utilizarse también con otras estructuras de control:
while, for, foreach y switch
switch
switch ($nombre) {
case 'Juan' : // sentencias
break;
case 'Luis' : // sentencias
break;
default : // sentencias
break;
}
Similar a lenguaje C
while, do...while, for
Similares a C, C++, Java,...
$total = 0;
$i = 1;
while ($i <= 10) {
$total += $i;
$i++;
}
echo $total; // 55
$total = 0;
$i = 1;
do {
$total += $i;
$i++;
} while ($i <= 10);
echo $total; // 55
También se puede utilizar break y continue
$total = 0;
for ($i = 0; $i <= 10; $i++) {
$total += $i;
}
echo $total; // 55
foreach
Iteraciones sobre los valores de un array
$lista = array(1,2,3,4,5);
foreach($lista as $valor) {
echo $valor;
}
$lista = array("ana" => 4, "mar" => 7, "luis" => 2);
foreach($lista as $clave=>$valor) {
echo "$clave tiene un $valor";
}
foreach ($array as $v) { sentencias; }
foreach ($array as $k => $v) { sentencias; }
Excepciones:
try...catch...throw
Similares a Java
PHP 5.5 admite finally
function inverso($x) {
if (!$x) {
throw new Exception('Div. cero.');
}
return 1/$x;
}
try {
echo inverso(5) . "n";
echo inverso(0) . "n";
} catch (Exception $e) {
echo 'Excepción capturada: ',
$e->getMessage(), "n";
}
NOTA:
El valor lanzado mediante throw
debe ser de clase Exception o
de una subclase de Exception
exit, return, die
exit finaliza la ejecución
Parámetro opcional: nº (status de salida), mensaje
return
Finaliza la ejecución del cuerpo de una función
Dentro de un script, finaliza el script
die(mensaje)
similar a exit(mensaje)
$db = mysql_connect("localhost", $USERNAME, $PASSWORD);
if (!$db) {
die("No se puede conectar a base de datos");
}
$db = mysql_connect("localhost", $USERNAME, $PASSWORD)
or die("No se puede conectar a base de datos");
Suele escribirse
como:
Ejemplo
goto
Continuar la ejecución en otro lugar
El lugar se indica mediante una etiqueta
Debe estar en el mismo ámbito
En general, siempre se puede escribir de otra forma
for ($i = 0; $i < $count; $i++) {
// sentencias...
if ($error) {
goto finalizar;
}
}
finalizar:
// sentencias...
Goto Statement considered harmful
Funciones en PHP
Declaración mediante function
Puede utilizarse recursividad
Nombres de funciones no sensibles mayúsculas/minúsculas
function factorial($num) {
if ($num == 0)
return 1;
elseif ($num > 0)
return $num * factorial($num - 1);
else
throw new Exception ( "Argumento negativo" );
}
echo Factorial(5); // 120
Ejercicios PHP
Utilizando PHPUnit, implementar:
factores($n): calcula los factores primos de un nº
https://gist.github.com/labra/0430c8f00db9f4198421
Funciones en PHP
No existe sobrecarga de funciones, no se pueden
redefinir funciones ni eliminar funciones ya definidas
Visibilidad de las variables
Cualquier referencia a variables dentro del cuerpo de la
función se entiende como referencia local
Si la variable no se declara en el interior de la función, su uso
produce una declaración implícita
Consecuencia: variables globales no visibles desde las
funciones
A menos que se declaren como global
Parámetros por valor
Paso por valor
Mecanismo por defecto
Si se modifica dentro, no afecta a la variable pasada
$x = 1; // variable global
function f($x) {
$x++ ; // variable local
}
f($x);
echo $x; // imprime 1
Parámetros por referencia
Paso por referencia
Se indica mediante & antes del parámetro
Si se modifica dentro, afecta a la variable pasada
$x = 1; // variable global
function f(&$x) {
$x++ ; // variable local
}
f($x);
echo $x; // imprime 2
Parámetros con valor por defecto
Parámetros con valor por defecto
Si no se pasa valor, se inicializa al valor por defecto
Se pueden tener cualquier nº de parámetros por defecto
Restricción: los parámetros por defecto deben ir después
del resto de parámetros
function f2($x = "Juan") {
echo "Hola $x" ;
}
f2("Luis"); // Hola Luis
f2(); // Hola Juan
Parámetros variables
Se declara la función sin parámetros
func_num_args() devuelve nº de argumentos
func_get_arg(n) devuelve argumento n
function sumaArgumentos()
{
$suma = 0;
for ($i = 0; $i < func_num_args(); $i++) {
$suma += func_get_arg($i);
}
return $suma;
}
echo sumaArgumentos(1, 5, 9); // 15
echo sumaArgumentos(1, 5); // 6
echo sumaArgumentos(); // 0
Parámetros con tipo
Puede declararse tipo de parámetros
Invocar con tipo incorrecto  Error ejecución
No se utiliza con tipos escalares
Se utiliza con clases, interfaces, arrays
class Animal {}
class Perro extends Animal {}
class Casa {}
function respira(Animal $a) {
echo "Respirando..." ;
}
respira(new Animal); // ok
respira(new Perro); // ok
respira(new Casa); // error
Devolver valores
Mediante return se devuelve un valor
Para devolver varios valores (utilizar array)
Si no se devuelve nada se asume NULL
Normalmente se hace una copia al devolver
Puede usarse & para devolver una referencia
No es necesario para mejorar rendimiento
function devuelve2() {
return array("Juan",23);
}
Funciones anónimas ó clausuras
PHP permite utilizar funciones sin nombre
Útil para crear funciones de forma rápida
Funciones que admiten funciones como parámetros
Pueden asignarse a variables
$lista = array("pepe","federico","juan","ana");
$filtro = array_filter($lista,
function($n) { return (strlen($n) == 4); });
// pepe, juan
$suma = function($a,$b) { return $a + $b; };
echo $suma(2,3);
Funciones predefinidas: strings
PHP tiene gran cantidad de funciones predefinidas y bibliotecas
chr: devuelve carácter dado el código ASCII
chunk_split: divide string en líneas de longitud fija
count_chars: nº de caracteres en un string
echo: imprime en la página resultante uno o más strings
No es una función, sino un elemento del lenguaje
implode/join: concatena varios strings usando otra cadena como
"pegamento" (ambos nombres son equivalentes)
ltrim, rtrim, trim: eliminan espacio en blanco de un string
printf / sprintf / scanf: similares a C
substr_count: cuenta ocurrencias de substrings
substr_replace: sustituye ocurrencias de substrings
Funciones predefinidas: strings (II)
strlen: calcula longitud de un string
strip_tags: elimina etiquetas HTML y PHP de un string
strcmp, strncmp... Comparación de strings
Tratamiento avanzado
soundex
levenshtein
similar_text
parse_str (analizar cadena tipo GET y fijar variables)
Funciones predefinidas:
manejo de ficheros
Permiten trabajar con ficheros remotos
Algunas solo funcionan con ficheros locales (ejemplo: fileatime)
fopen, fclose
chgrp, chmod, chown
feof
fgetc, fgets, fscanf
tmpfile
copy, delete, rename
parse_ini_file
fileperms, filesize, file_exists, file_get_contents
[muchas más]
Funciones predefinidas:
configuración
Función phpinfo()
Si se incluye en una página, ofrece todo tipo de detalles
sobre configuración, servidor, variables disponibles, etc.
Muy útil para el desarrollador (conocer detalles del servidor)
Por supuesto, ofrecer sus resultados al público puede
comprometer la seguridad del sitio
Función phpversion()
Devuelve la versión de PHP que se está usando
Clases y Objetos
Las últimas versiones de PHP soportan POO
class Persona {
private $nombre, $edad;
function __construct($nombre,$edad=0) {
$this->nombre= $nombre;
$this->edad = $edad;
}
function envejecer() { $this->edad++; }
function toString() {
return $this->nombre . ': ' .
$this->edad . ' años';
}
}
$juan = new Persona("Juan",23);
$juan->envejecer();
echo $juan->toString();
Juan: 24 años
Constructor. También puede
usarse: __destruct()
Herencia
Mediante extends se permite herencia simple
class Empleado extends Persona {
private $empresa;
function __construct($nombre,$edad,$empresa) {
parent::__construct($nombre,$edad);
$this->empresa = $empresa;
}
}
$personas = array(new Persona("Pepe",22),
new Empleado("Luis",34,"IBM"));
foreach ($personas as $p) $p->envejecer();
foreach ($personas as $p) echo $p->toString();
Pepe: 23 años
Luis: 35 años
Persona
Empleado
Clases abstractas
abstract class Figura {
private $x, $y;
function __construct($x, $y) {
$this->x = $x; $this->y = $y;
}
abstract function area();
function mover($dx,$dy) {
$this->x+=$dx;
$this->y+=$dy;
}
}
class Circulo extends Figura {
private $radio ;
function __construct($radio,$x,$y) {
parent::__construct($x,$y);
$this->radio = $radio;
}
function area() {
return pi() * pow($this->radio,2);
}
}
Ejercicio Figuras
Crear una clase Figura con 2 atributos (x,y)
Método que permita mover la figura
Crear una clase Rect para representar Rectángulos
Atributos a (ancho) y b (altura)
Crear una clase Circulo para representar Círculos
Atributo r (radio)
Crear método area() para calcular el área
Crear método area_figuras() que calcula el área de una
lista de figuras
https://gist.github.com/labra/507059826c2bd2e9b694
Ejercicio con agregación
Modelar cursos con alumnos
Una clase curso compuesta por:
Nombre del curso
Lista de alumnos
Una clase alumno compuesta por
id del alumno
nota del alumno
Definir métodos de curso:
getNota(id)
ponNota(id,nota)
media
Curso Alumno
1..n1
https://gist.github.com/labra/1f8ed2a054936bbdd4cc
Constantes
Constantes dentro de una clase
Su valor no puede modificarse
Pueden accederse mediante :: ó mediante self
class MétodoPago {
const TARJETA_CREDITO = 'CREDITO';
const CONTADO = 'CONTADO';
}
echo MétodoPago::TARJETA_CREDITO;
Interfaces
Describen conjuntos de métodos y constantes
Permiten herencia múltiple
interface a {
function a();
}
interface b {
function b();
}
class AB implements a, b {
function a() { echo "AB implementa a"; }
function b() { echo "AB implementa b"; }
}
Traits
Permiten reutilizar métodos entre clases
trait Saludador {
function saluda($nombre) {
echo "Hola $nombre! soy un " .
get_class($this);
}
}
class Coche {
use Saludador;
// ...
}
$c = new Coche;
$a = new Lápiz;
$c->saluda("Pepe"); // Hola Pepe! soy un Coche
$a->saluda("Juan"); // Hola Juan! soy un Lápiz
class Lápiz {
use Saludador;
// ...
}
Modularización
require(nombreFichero)
Incluye (y evalúa) el fichero
Si no lo encuentra, error fatal y fin de ejecución
include(nombreFichero)
Como require(), pero si el fichero no aparece se
produce sólo un warning.
require_once, include_once
Como las anteriores pero sólo carga el fichero una vez
Ejercicio Hashes y Arrays
Corregir exámenes. Aciertos: +1, fallos: -0.25
[ {"pregunta" => 1, "correcta" => "a"},
{"pregunta" => 2, "correcta" => "b"}]
[ {"alumno" => 2456,
"respuestas" => [{ "pregunta" => 1, "respuesta" => "a"},
{ "pregunta" => 2, "respuesta" => "b"}]},
{"alumno" => 4321,
"respuestas" => [{ "pregunta" => 1, "respuesta" => "b"},
{ "pregunta" => 2, "respuesta" => "b"}]}]
[ {"alumno" => 2456, "nota" => 2},
{"alumno" => 4321, "nota" => 0.75}]
https://gist.github.com/labra/de3923e1e4753bd1756b
Técnicas Web en PHP
WWW
GET http://ejemplo.com/form.html
<form method="post"
action="http://ejemplo.com/procesa">
<label>Nombre: <input name="cliente"></label><br>
<label>Correo electrónico: <input name="correo"></label><br>
<button>Enviar</button>
</form>
Formularios en la Web
Usuario
Servidor
POST http://ejemplo.com/procesa
cliente = pepe
correo = pepe@kiko.com
http://ejemplo.com/form.html
form.html
<?php
if ($_SERVER['REQUEST_METHOD']=='POST') {
echo "<h1>Hola {$_POST['cliente']}</h1>";
echo "<p>Email: {$_POST['correo']}</p>";
} else {
die("Invocación incorrecta");
}
?>
WWW
Procesando un formulario
Valores accesibles en arrays $_POST, $_GET, etc.
GET http://ejemplo.com/form.html
Usuario
Servidor
POST http://ejemplo.com/procesa
cliente = pepe
correo = pepe@kiko.com
form.html
resultado
<h1>Hola Pepe</h1>
<p>Email: pepe@kiko.com</p>
Todo en un solo fichero PHP
<html><head><title>Formulario</title></head>
<body>
<?php if ($_SERVER['REQUEST_METHOD'] == 'GET') : ?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>"
method="POST">
<label>Nombre:
<input name="cliente"></label><br>
<label>Correo electrónico:
<input name="correo" type="email"></label><br>
<button>Enviar</button>
</form>
<?php
else ($_SERVER['REQUEST_METHOD'] == 'POST') :
echo "<h1>Hola {$_POST['cliente']}</h1>";
echo "<p>Email: {$_POST['correo']}</p>";
else:
die("Sólo se admiten peticiones GET y POST.");
endif ?>
</body></html>
Formularios y PHP
Valores accesibles mediante arrays globales:
$_POST valores pasados usando método POST
$_GET valores pasados usando método GET
$_COOKIE valores pasados mediante cookies
$_FILES ficheros que han sido subidos (uploaded)
$_SERVER información sobre el servidor
$_ENV información sobre el entorno
$_REQUEST junta $_GET, $_POST y $_COOKIE en uno
Subiendo ficheros
Array $_FILES contiene información
name: nombre del fichero
type: tipo MIME
size: tamaño
tmp_name: nombre del fichero temporal en el
sistema de archivos del servidor
2 funciones útiles:
is_uploaded_file: true si el fichero se subió
move_uploaded_file: mueve el fichero subido
Técnicas Web en PHP
header permite enviar cabeceras HTTP
<?php
switch ($_GET['formato']) {
case 'xml':
header('Content-type: application/xml');
echo "<alumno id='23'><nombre>Pepe</nombre></alumno>";
break;
default:
header('Content-type: text/html');
echo "<html><h1>Pepe</h1></html>";
break;
}
?>
Manipulando XML
PHP contiene varios procesadores de XML
Analizador SAX (basado en eventos)
DOM
SimpleXML
Cargar/Validar XML
Clase DOMDocument contiene métodos de
manipulación DOM
load: carga fichero XML
validate: valida contra un DTD
schemavalidate: valida contra un Schema
saveXML: guarda fichero XML en un String
save: guarda en fichero
$doc = new DomDocument();
$doc->load($fileName);
if ($doc->schemaValidate($schemaFile))
echo "Válido";
else
echo "No Válido";
Crear XML mediante DOM
$lista = array("Pepe","Juan");
$doc = new DOMDocument("1.0");
$alumnos = $doc->appendChild($doc->createElement('alumnos'));
foreach ($lista as $n) {
$alumno = $alumnos->appendChild($doc->createElement('alumno'));
$nombre = $alumno->appendChild($doc->createElement('nombre'));
$nombre->appendChild($doc->createTextNode($n));
}
header("Content-type: text/xml");
echo $doc->saveXML();
<alumnos>
<alumno>
<nombre>Pepe</nombre>
</alumno>
<alumno>
<nombre>Juan</nombre>
</alumno>
</alumnos>
Acceder mediante XPath
Clase DOMXPath
$doc = new DomDocument();
$doc->load("alumnos.xml");
$expr = new DOMXPath($doc);
$nombres = $expr->query("//nombre");
foreach ($nombres as $n) {
echo $n->nodeValue . "<br/>" ;
}
Transformar mediante XSLT
Clase XSLTProcessor
$doc = new DOMDocument();
$doc->load("alumnos.xml");
$xsl = new DOMDocument();
$xsl->load("alumnos.xsl");
$xslProc = new XSLTProcessor();
$xslProc->importStylesheet($xsl);
$newDoc = $xslProc->transformToDoc($doc);
echo $newDoc->saveHTML();
Ventajas de PHP
Tecnología del servidor
Gran cantidad de módulos desarrollados por terceros
Bibliotecas para "casi todo"
Soporte en gran cantidad de servidores
Gratuito y no-propietario
Muy dinámico (muchas cosas se resuelven en ejecución)
Uso extendido
Mucha documentación
74
Desventajas de PHP
Lenguaje interpretado  Eficiencia?
Sin comprobación estática de tipos
Errores en tiempo de ejecución
Detalles de sintaxis poco habituales
Uso de -> en vez de .
Uso de $ con las variables
Referencias
Espeficicación:
http://php.net/
Recomendaciones:
http://www.phptherightway.com/
PHP y XML
http://www.ibm.com/developerworks/xml/library/x-xmlphp1
http://www.ibm.com/developerworks/library/x-xpathphp/

Weitere ähnliche Inhalte

Was ist angesagt? (20)

11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
Text field and textarea
Text field and textareaText field and textarea
Text field and textarea
 
Php with mysql ppt
Php with mysql pptPhp with mysql ppt
Php with mysql ppt
 
Introducción a PHP
Introducción a PHPIntroducción a PHP
Introducción a PHP
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Java
JavaJava
Java
 
PHP Presentation
PHP PresentationPHP Presentation
PHP Presentation
 
Lenguaje PHP
Lenguaje PHPLenguaje PHP
Lenguaje PHP
 
JavaFX 2
JavaFX 2JavaFX 2
JavaFX 2
 
What is component in reactjs
What is component in reactjsWhat is component in reactjs
What is component in reactjs
 
Introduction to gradle
Introduction to gradleIntroduction to gradle
Introduction to gradle
 
sistemas operativos libres y licenciados
sistemas operativos libres y licenciadossistemas operativos libres y licenciados
sistemas operativos libres y licenciados
 
Classes, objects in JAVA
Classes, objects in JAVAClasses, objects in JAVA
Classes, objects in JAVA
 
PHP - Introduction to PHP Error Handling
PHP -  Introduction to PHP Error HandlingPHP -  Introduction to PHP Error Handling
PHP - Introduction to PHP Error Handling
 
Spring boot
Spring bootSpring boot
Spring boot
 
6. Utilización del modelo de objetos del documento (DOM)
6. Utilización del modelo de objetos del documento (DOM)6. Utilización del modelo de objetos del documento (DOM)
6. Utilización del modelo de objetos del documento (DOM)
 
PHP MVC
PHP MVCPHP MVC
PHP MVC
 
Significado xampp
Significado xamppSignificado xampp
Significado xampp
 
Semana 3 Herencia en Java
Semana 3   Herencia en JavaSemana 3   Herencia en Java
Semana 3 Herencia en Java
 

Andere mochten auch

Andere mochten auch (20)

Introducción a PHP
Introducción a PHPIntroducción a PHP
Introducción a PHP
 
introduccion al Lenguaje php
introduccion al Lenguaje phpintroduccion al Lenguaje php
introduccion al Lenguaje php
 
Introducción a PHP - Universidad del Pacifico
Introducción a PHP - Universidad del PacificoIntroducción a PHP - Universidad del Pacifico
Introducción a PHP - Universidad del Pacifico
 
Php adriana vllacis
Php adriana vllacisPhp adriana vllacis
Php adriana vllacis
 
DEFINICION DE Php
DEFINICION DE PhpDEFINICION DE Php
DEFINICION DE Php
 
El lenguaje php
El lenguaje phpEl lenguaje php
El lenguaje php
 
Php ppt
Php pptPhp ppt
Php ppt
 
Introduccion a php
Introduccion a phpIntroduccion a php
Introduccion a php
 
PHP
PHPPHP
PHP
 
Introducción a programación con PHP
Introducción a programación con PHPIntroducción a programación con PHP
Introducción a programación con PHP
 
Sistemas Numéricos y Códigos Digitales
Sistemas Numéricos y Códigos DigitalesSistemas Numéricos y Códigos Digitales
Sistemas Numéricos y Códigos Digitales
 
LENGUAJE HTML
LENGUAJE HTMLLENGUAJE HTML
LENGUAJE HTML
 
Introducción al lenguaje HTML
Introducción al lenguaje HTMLIntroducción al lenguaje HTML
Introducción al lenguaje HTML
 
Simpósio nossas deficiências - FMJ
Simpósio nossas deficiências - FMJ  Simpósio nossas deficiências - FMJ
Simpósio nossas deficiências - FMJ
 
Hackathon Neuquen "Desde el Habeas Data al Open Data"
Hackathon Neuquen "Desde el Habeas Data al Open Data"Hackathon Neuquen "Desde el Habeas Data al Open Data"
Hackathon Neuquen "Desde el Habeas Data al Open Data"
 
Informática jurídica
Informática jurídicaInformática jurídica
Informática jurídica
 
Presentacion magdalena
Presentacion magdalenaPresentacion magdalena
Presentacion magdalena
 
Docencia y tecnología
Docencia y tecnologíaDocencia y tecnología
Docencia y tecnología
 
Adherencia en cardiopatia isquemica abril10
Adherencia en cardiopatia isquemica  abril10Adherencia en cardiopatia isquemica  abril10
Adherencia en cardiopatia isquemica abril10
 
Practica 13 io
Practica 13 ioPractica 13 io
Practica 13 io
 

Ähnlich wie 3 Introducción al lenguaje PHP

Ähnlich wie 3 Introducción al lenguaje PHP (20)

32773 php-basico
32773 php-basico32773 php-basico
32773 php-basico
 
Elementos del Hardware y Software
Elementos del Hardware y SoftwareElementos del Hardware y Software
Elementos del Hardware y Software
 
Php
PhpPhp
Php
 
Tema2[php]
Tema2[php]Tema2[php]
Tema2[php]
 
Presentacion
PresentacionPresentacion
Presentacion
 
0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf
 
PHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básicoPHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básico
 
Tema2 3
Tema2 3Tema2 3
Tema2 3
 
Proyectos Web 3 Introduccion Php
Proyectos Web   3 Introduccion PhpProyectos Web   3 Introduccion Php
Proyectos Web 3 Introduccion Php
 
Curso php y_mysql
Curso php y_mysqlCurso php y_mysql
Curso php y_mysql
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 
Guia programacionwebbasicophp
Guia programacionwebbasicophpGuia programacionwebbasicophp
Guia programacionwebbasicophp
 
Php
PhpPhp
Php
 
Php
PhpPhp
Php
 
Php Basico
Php BasicoPhp Basico
Php Basico
 
PHP
PHPPHP
PHP
 
Php1 sesión 6
Php1 sesión 6Php1 sesión 6
Php1 sesión 6
 
Curso php dia2
Curso php dia2Curso php dia2
Curso php dia2
 
Curso php y_my_sql
Curso php y_my_sqlCurso php y_my_sql
Curso php y_my_sql
 
Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
 

Mehr von Jose Emilio Labra Gayo

Introducción a la investigación/doctorado
Introducción a la investigación/doctoradoIntroducción a la investigación/doctorado
Introducción a la investigación/doctoradoJose Emilio Labra Gayo
 
Challenges and applications of RDF shapes
Challenges and applications of RDF shapesChallenges and applications of RDF shapes
Challenges and applications of RDF shapesJose Emilio Labra Gayo
 
Legislative data portals and linked data quality
Legislative data portals and linked data qualityLegislative data portals and linked data quality
Legislative data portals and linked data qualityJose Emilio Labra Gayo
 
Validating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesValidating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesJose Emilio Labra Gayo
 
Legislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesLegislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesJose Emilio Labra Gayo
 
Como publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosComo publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosJose Emilio Labra Gayo
 
Arquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorArquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorJose Emilio Labra Gayo
 

Mehr von Jose Emilio Labra Gayo (20)

Publicaciones de investigación
Publicaciones de investigaciónPublicaciones de investigación
Publicaciones de investigación
 
Introducción a la investigación/doctorado
Introducción a la investigación/doctoradoIntroducción a la investigación/doctorado
Introducción a la investigación/doctorado
 
Challenges and applications of RDF shapes
Challenges and applications of RDF shapesChallenges and applications of RDF shapes
Challenges and applications of RDF shapes
 
Legislative data portals and linked data quality
Legislative data portals and linked data qualityLegislative data portals and linked data quality
Legislative data portals and linked data quality
 
Validating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesValidating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectives
 
Wikidata
WikidataWikidata
Wikidata
 
Legislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesLegislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologies
 
ShEx by Example
ShEx by ExampleShEx by Example
ShEx by Example
 
Introduction to SPARQL
Introduction to SPARQLIntroduction to SPARQL
Introduction to SPARQL
 
Introducción a la Web Semántica
Introducción a la Web SemánticaIntroducción a la Web Semántica
Introducción a la Web Semántica
 
RDF Data Model
RDF Data ModelRDF Data Model
RDF Data Model
 
2017 Tendencias en informática
2017 Tendencias en informática2017 Tendencias en informática
2017 Tendencias en informática
 
RDF, linked data and semantic web
RDF, linked data and semantic webRDF, linked data and semantic web
RDF, linked data and semantic web
 
Introduction to SPARQL
Introduction to SPARQLIntroduction to SPARQL
Introduction to SPARQL
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
Como publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosComo publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazados
 
16 Alternativas XML
16 Alternativas XML16 Alternativas XML
16 Alternativas XML
 
XSLT
XSLTXSLT
XSLT
 
XPath
XPathXPath
XPath
 
Arquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorArquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el Servidor
 

Kürzlich hochgeladen

presentación de topografía y sus aplicaciones
presentación de topografía y sus aplicacionespresentación de topografía y sus aplicaciones
presentación de topografía y sus aplicacionesCarlosA427496
 
La Evolución Industrial en el Ecuador.pdf
La Evolución Industrial en el Ecuador.pdfLa Evolución Industrial en el Ecuador.pdf
La Evolución Industrial en el Ecuador.pdfAnthony Gualpa
 
FOLIACIONES Y LINEACIONES GEOLOGÍA ESTRUCTURAL
FOLIACIONES Y LINEACIONES GEOLOGÍA ESTRUCTURALFOLIACIONES Y LINEACIONES GEOLOGÍA ESTRUCTURAL
FOLIACIONES Y LINEACIONES GEOLOGÍA ESTRUCTURALRiveraPemintelAlejan
 
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticas
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticasEJERCICIOS DE -LEY-DE-OHM aplicaciones prácticas
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticasEfrain Yungan
 
Análisis de Varianza- Anova y pruebas de estadística
Análisis de Varianza- Anova y pruebas de estadísticaAnálisis de Varianza- Anova y pruebas de estadística
Análisis de Varianza- Anova y pruebas de estadísticaJoellyAlejandraRodrg
 
ENSAYO DE PENETRACIÓN ESTÁTICA CTP ULTRADEFINITIVO.pptx
ENSAYO DE PENETRACIÓN ESTÁTICA CTP ULTRADEFINITIVO.pptxENSAYO DE PENETRACIÓN ESTÁTICA CTP ULTRADEFINITIVO.pptx
ENSAYO DE PENETRACIÓN ESTÁTICA CTP ULTRADEFINITIVO.pptxjosetuanama2
 
Sales binarias y oxisales química inorganica
Sales binarias y oxisales química inorganicaSales binarias y oxisales química inorganica
Sales binarias y oxisales química inorganicakiaranoemi
 
EXPOSICION UNIDAD 3 MANTENIMIENTOO .pptx
EXPOSICION UNIDAD 3 MANTENIMIENTOO .pptxEXPOSICION UNIDAD 3 MANTENIMIENTOO .pptx
EXPOSICION UNIDAD 3 MANTENIMIENTOO .pptxKeylaArlethTorresOrt
 
Sistema de Base de Datos para renta de trajes
Sistema de Base de Datos para renta de trajesSistema de Base de Datos para renta de trajes
Sistema de Base de Datos para renta de trajesjohannyrmnatejeda
 
MANUAL DE NORMAS SANITARIAS PERUANAS ACTUALIZADO 2024.pdf
MANUAL DE NORMAS SANITARIAS PERUANAS ACTUALIZADO 2024.pdfMANUAL DE NORMAS SANITARIAS PERUANAS ACTUALIZADO 2024.pdf
MANUAL DE NORMAS SANITARIAS PERUANAS ACTUALIZADO 2024.pdfciteagrohuallaga07
 
Sales Básicas Quimica, conocer como se forman las sales basicas
Sales Básicas Quimica, conocer como se forman las sales basicasSales Básicas Quimica, conocer como se forman las sales basicas
Sales Básicas Quimica, conocer como se forman las sales basicasPaulina Cargua
 
Dispositivos Semiconductores de Potencia BJT, MOSFET 01.pdf
Dispositivos Semiconductores de Potencia BJT, MOSFET 01.pdfDispositivos Semiconductores de Potencia BJT, MOSFET 01.pdf
Dispositivos Semiconductores de Potencia BJT, MOSFET 01.pdfdego18
 
La mineralogia y minerales, clasificacion
La mineralogia y minerales, clasificacionLa mineralogia y minerales, clasificacion
La mineralogia y minerales, clasificacionnewspotify528
 
ESTUDIO TÉCNICO DEL PROYECTO DE CREACION DE SOFTWARE PARA MANTENIMIENTO
ESTUDIO TÉCNICO DEL PROYECTO DE CREACION DE SOFTWARE PARA MANTENIMIENTOESTUDIO TÉCNICO DEL PROYECTO DE CREACION DE SOFTWARE PARA MANTENIMIENTO
ESTUDIO TÉCNICO DEL PROYECTO DE CREACION DE SOFTWARE PARA MANTENIMIENTOCamiloSaavedra30
 
04-circuitos-comparadores de amplificadores operacionales.pptx
04-circuitos-comparadores de amplificadores operacionales.pptx04-circuitos-comparadores de amplificadores operacionales.pptx
04-circuitos-comparadores de amplificadores operacionales.pptxHenryApaza12
 
PLANTILLA DE PP PREVENCIONISTA DE RIESGOS LABORALES (1).pptx.pdf
PLANTILLA DE PP PREVENCIONISTA DE RIESGOS LABORALES (1).pptx.pdfPLANTILLA DE PP PREVENCIONISTA DE RIESGOS LABORALES (1).pptx.pdf
PLANTILLA DE PP PREVENCIONISTA DE RIESGOS LABORALES (1).pptx.pdfmcamposa87
 
Sanidad en alpacas, enfermedades infecciosas y parasitarias
Sanidad en alpacas, enfermedades infecciosas y parasitariasSanidad en alpacas, enfermedades infecciosas y parasitarias
Sanidad en alpacas, enfermedades infecciosas y parasitariasJilvertHuisaCenteno
 
Química Analítica-U1y2-2024.pdf. Unidades 1 y 2
Química Analítica-U1y2-2024.pdf. Unidades 1 y 2Química Analítica-U1y2-2024.pdf. Unidades 1 y 2
Química Analítica-U1y2-2024.pdf. Unidades 1 y 2santiagoBernabei8
 
GeoS4344444444444444444444444444444444.pdf
GeoS4344444444444444444444444444444444.pdfGeoS4344444444444444444444444444444444.pdf
GeoS4344444444444444444444444444444444.pdffredyflores58
 
209530529 Licuacion-de-Suelos-en-Arequipa.pdf
209530529 Licuacion-de-Suelos-en-Arequipa.pdf209530529 Licuacion-de-Suelos-en-Arequipa.pdf
209530529 Licuacion-de-Suelos-en-Arequipa.pdfnurix_15
 

Kürzlich hochgeladen (20)

presentación de topografía y sus aplicaciones
presentación de topografía y sus aplicacionespresentación de topografía y sus aplicaciones
presentación de topografía y sus aplicaciones
 
La Evolución Industrial en el Ecuador.pdf
La Evolución Industrial en el Ecuador.pdfLa Evolución Industrial en el Ecuador.pdf
La Evolución Industrial en el Ecuador.pdf
 
FOLIACIONES Y LINEACIONES GEOLOGÍA ESTRUCTURAL
FOLIACIONES Y LINEACIONES GEOLOGÍA ESTRUCTURALFOLIACIONES Y LINEACIONES GEOLOGÍA ESTRUCTURAL
FOLIACIONES Y LINEACIONES GEOLOGÍA ESTRUCTURAL
 
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticas
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticasEJERCICIOS DE -LEY-DE-OHM aplicaciones prácticas
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticas
 
Análisis de Varianza- Anova y pruebas de estadística
Análisis de Varianza- Anova y pruebas de estadísticaAnálisis de Varianza- Anova y pruebas de estadística
Análisis de Varianza- Anova y pruebas de estadística
 
ENSAYO DE PENETRACIÓN ESTÁTICA CTP ULTRADEFINITIVO.pptx
ENSAYO DE PENETRACIÓN ESTÁTICA CTP ULTRADEFINITIVO.pptxENSAYO DE PENETRACIÓN ESTÁTICA CTP ULTRADEFINITIVO.pptx
ENSAYO DE PENETRACIÓN ESTÁTICA CTP ULTRADEFINITIVO.pptx
 
Sales binarias y oxisales química inorganica
Sales binarias y oxisales química inorganicaSales binarias y oxisales química inorganica
Sales binarias y oxisales química inorganica
 
EXPOSICION UNIDAD 3 MANTENIMIENTOO .pptx
EXPOSICION UNIDAD 3 MANTENIMIENTOO .pptxEXPOSICION UNIDAD 3 MANTENIMIENTOO .pptx
EXPOSICION UNIDAD 3 MANTENIMIENTOO .pptx
 
Sistema de Base de Datos para renta de trajes
Sistema de Base de Datos para renta de trajesSistema de Base de Datos para renta de trajes
Sistema de Base de Datos para renta de trajes
 
MANUAL DE NORMAS SANITARIAS PERUANAS ACTUALIZADO 2024.pdf
MANUAL DE NORMAS SANITARIAS PERUANAS ACTUALIZADO 2024.pdfMANUAL DE NORMAS SANITARIAS PERUANAS ACTUALIZADO 2024.pdf
MANUAL DE NORMAS SANITARIAS PERUANAS ACTUALIZADO 2024.pdf
 
Sales Básicas Quimica, conocer como se forman las sales basicas
Sales Básicas Quimica, conocer como se forman las sales basicasSales Básicas Quimica, conocer como se forman las sales basicas
Sales Básicas Quimica, conocer como se forman las sales basicas
 
Dispositivos Semiconductores de Potencia BJT, MOSFET 01.pdf
Dispositivos Semiconductores de Potencia BJT, MOSFET 01.pdfDispositivos Semiconductores de Potencia BJT, MOSFET 01.pdf
Dispositivos Semiconductores de Potencia BJT, MOSFET 01.pdf
 
La mineralogia y minerales, clasificacion
La mineralogia y minerales, clasificacionLa mineralogia y minerales, clasificacion
La mineralogia y minerales, clasificacion
 
ESTUDIO TÉCNICO DEL PROYECTO DE CREACION DE SOFTWARE PARA MANTENIMIENTO
ESTUDIO TÉCNICO DEL PROYECTO DE CREACION DE SOFTWARE PARA MANTENIMIENTOESTUDIO TÉCNICO DEL PROYECTO DE CREACION DE SOFTWARE PARA MANTENIMIENTO
ESTUDIO TÉCNICO DEL PROYECTO DE CREACION DE SOFTWARE PARA MANTENIMIENTO
 
04-circuitos-comparadores de amplificadores operacionales.pptx
04-circuitos-comparadores de amplificadores operacionales.pptx04-circuitos-comparadores de amplificadores operacionales.pptx
04-circuitos-comparadores de amplificadores operacionales.pptx
 
PLANTILLA DE PP PREVENCIONISTA DE RIESGOS LABORALES (1).pptx.pdf
PLANTILLA DE PP PREVENCIONISTA DE RIESGOS LABORALES (1).pptx.pdfPLANTILLA DE PP PREVENCIONISTA DE RIESGOS LABORALES (1).pptx.pdf
PLANTILLA DE PP PREVENCIONISTA DE RIESGOS LABORALES (1).pptx.pdf
 
Sanidad en alpacas, enfermedades infecciosas y parasitarias
Sanidad en alpacas, enfermedades infecciosas y parasitariasSanidad en alpacas, enfermedades infecciosas y parasitarias
Sanidad en alpacas, enfermedades infecciosas y parasitarias
 
Química Analítica-U1y2-2024.pdf. Unidades 1 y 2
Química Analítica-U1y2-2024.pdf. Unidades 1 y 2Química Analítica-U1y2-2024.pdf. Unidades 1 y 2
Química Analítica-U1y2-2024.pdf. Unidades 1 y 2
 
GeoS4344444444444444444444444444444444.pdf
GeoS4344444444444444444444444444444444.pdfGeoS4344444444444444444444444444444444.pdf
GeoS4344444444444444444444444444444444.pdf
 
209530529 Licuacion-de-Suelos-en-Arequipa.pdf
209530529 Licuacion-de-Suelos-en-Arequipa.pdf209530529 Licuacion-de-Suelos-en-Arequipa.pdf
209530529 Licuacion-de-Suelos-en-Arequipa.pdf
 

3 Introducción al lenguaje PHP

  • 1. Introducción a PHP Jose Emilio Labra Gayo Depto. Informática Universidad de Oviedo
  • 2. Historia de PHP 1995: Personal Home Page/Forms Interpreter, por Rasmus Lerdorf Controlar nº accesos a su currículum vitae Conjunto de programas en C Liberado al dominio público 1997: PHP/FI 2.0, PHP 3.0. Zeev Suraski y Andi Gutmans Renombrado a PHP: Hypertext Preprocessor Nuevas características: Módulos, objetos 2000: PHP 4.0 Nuevo motor llamado Zend, soporte a nuevos servidores 2004: PHP 5.0 Zend Engine 2.0 Mejor soporte para POO Integración con modelos OO externos (COM, Java) Gestión de excepciones Se inicia PHP 6 pero se mantiene en PHP 5.4 (2012) 2013: PHP 5.5, HipHop Virtual Machine (facebook) 2014: PHP 5.6 Rasmus Lerdorf Creador PHP
  • 3. Ecosistema PHP Página oficial: http://php.net/ Editores: Eclipse, PHPStorm Estilo: http://www.phptherightway.com/ Gestión de paquetes: PEAR, Composer Recomendado: XAMPP Ejecución: php Interactivo: php -a: no funciona en Windows phpsh
  • 4. Incrustación en páginas Web (I) Código PHP está dentro de una página HTML El servidor interpreta el código DESPUÉS de interpretarlo, servidor devuelve resultado Secuencia de escape: Indicar dónde empieza y acaba el código Varias opciones: <? código PHP ?> <script language="php"> código PHP </script> <?php código PHP ?> <% código PHP %>
  • 5. hola.php <html> <head> <title>Hola</title> </head> <body> <h1>Fecha: <?= date("d.m.y")?></h1> <?php if (date ("d") % 2 == 0) { echo "Hoy es un día par"; } else { echo "Hoy es un día impar"; } ?> </body> </html> Hola Mundo
  • 6. Elementos básicos Separador de instrucciones: punto y coma ; Mayúsculas/minúsculas Identificadores y nombres de variables: Se distinguen Es diferente $nombre de $Nombre Nombres de funciones: No se distinguen Es lo mismo: print_r, Print_r Nota: Cierre de la secuencia de escape, ?>, implica separación de instrucciones. y en este caso no hace falta el ;
  • 7. Comentarios Comentarios: Estilo C, C++ y shell Varias líneas estilo Java: /* Esto es un comentario */ En línea estilo Java: // Esta línea es un comentario En línea estilo shell # Esta línea es un comentario NOTA: Los comentarios “de línea” se dan por finalizados cuando llega un cierre de la secuencia de escape Los comentarios no afectan al HTML: // Esto no se ve ?> Esto sí se ve
  • 8. Identificadores Comienza por letra o _, seguido de alfanuméricos y/o subrayados Reglas habituales en otros lenguajes de programación Distingue mayúsculas y minúsculas En este caso, “letra” incluye los caracteres ASCII de 7F a FF (de 127 a 255). Por tanto, se pueden usar vocales acentuadas y demás NOTA: Convención habitual: snake_case Ejemplo: mysql_affected_rows
  • 9. Variables Siempre van precedidas por símbolo $ $nombre No se especifica el tipo $edad = 21; No es necesario declarar las variables NOTA: No hay chequeo estático de tipos  Errores en tiempo de ejecución
  • 10. Variables Variables variables ($$) Asignación por referencia (&) Eliminar una variable: unset $uno = "saludo"; $$uno = "adios"; echo $saludo; // escribe "adios" $x = 1 ; $r = & $x; // r es una referencia a x $x = 2 ; // cambia el valor de x echo $r; // imprime 2
  • 11. Ámbito de una variable Ámbito (Scope) = contexto en el que está definida Si la variable se declara en una función, su ámbito es local a esa función Una variable local oculta una variable global con el mismo nombre $x = 1; // variable global function f() { $x = 2 ; // variable local } f(); echo $x; // imprime 1
  • 12. Ámbito global global permite acceder a la variable global $x = 1; function f() { global $x ; // $x se refiere a la x externa $x = 2 ; } f(); echo $x; // imprime 2 Nota: también puede usarse el array GLOBALS para acceder a variables globales $GLOBALS["x"] = 2 ;
  • 13. Variables estáticas Retienen su valor entre llamadas a una función Sólo son visibles dentro de dicha función $x = 10; function cuentaLlamadas() { static $x = 0; $x++; echo "Llamada $x"; } cuentaLlamadas(); // escribe Llamada 1 cuentaLlamadas(); // escribe Llamada 2 echo $x; // escribe 10
  • 14. Ejercicios PHP Utilizando PHPUnit, implementar: par($n): chequea que un nº es par factorial($n): calcula el factorial de un nº https://gist.github.com/labra/942032f1bae1686f5d09
  • 15. Tipos de datos 8 tipos primitivos Escalares boolean, integer, float, string Complejos array object Especiales Resource NULL
  • 16. Booleanos y Números Boolean: TRUE ó FALSE Valores Null, 0, "", 0.0, arrays vacíos, objetos vacíos = false Enteros No hay unsigned. Tamaño dependiente de plataforma. Notación octal (empezar en 0) Hexadecimal (empezar en 0x) Binaria (empieza por 0b) Flotantes Válida notación científica Tamaño dependiente de plataforma.
  • 17. Strings Comillas simples: 'Hola amigo' como carácter de escape sólo para ' y " se trata como un carácter más Las variables NO se interpretan Comillas dobles: "Hola n amigo" como carácter de escape en: n, r, t, $... Las comillas dobles internas deben precederse con Las variables SÍ se interpretan. Cadenas heredoc Bloque de texto entre <<<identificador y otra aparición de identificador $poema = <<< Fin Esto es una cadena con dos líneas Fin; $nombre = "Juan" ; $saludo ="Hola $nombre";
  • 18. Arrays Array = mapa ordenado de objetos Se crean mediante array() Se accede mediante [] Recorrido mediante foreach 2 tipos: Arrays indexados: clave = entero Arrays asociativos: clave = String
  • 19. Arrays indexados Clave = enteros Comienza por 0 $personas = array("juan","luis","ana"); print($personas[1]); // luis $personas[3] = "pepe"; // Inserta un valor en posición 3 $personas[] = "kiko"; // Inserta valor al final foreach($personas as $p) { echo $p . " "; }
  • 20. Arrays asociativos Clave = String $nota = array("juan" => 5.5, "luis" => 8.5); print($nota['luis']); // 8.5 foreach($nota as $p => $n) { echo "$p tiene un $n"; }
  • 21. Arrays Internamente son todo arrays asociativos Las claves pueden ser enteros o strings Los valores pueden ser de cualquier tipo $cosas = array("pepe",2,array(2,3)); foreach ($cosas as $c) { var_dump($c); } array(3) { [0] => string(4) "pepe" [1] => int(2) [2] => array(2) { [0]=> int(2) [1]=> int(3) } }
  • 22. Arrays multidimensionales Arrays cuyos valores son arrays $matriz = array(array(4,5), array(8,2), array(3,6)); for ($i = 0; $i < count($matriz); $i++) { $fila = $matriz[$i]; for ($j = 0; $j < count($fila); $j++) { echo "($i,$j)=$fila[$j] "; } echo "n"; } (0,0)=4 (0,1)=5 (1,0)=8 (1,1)=2 (2,0)=3 (2,1)=6
  • 23. Recursos El tipo de datos Resource referencia un recurso externo Cuando no hay más referencias a un recurso se libera automáticamente function search() { $res = database_connect(); database_query($res); }
  • 24. Sistema de tipos Sistema de tipos dinámico Modificación de tipo al vuelo Existe ahormado al estilo C. Algunas funciones útiles: var_dump : Tipo y valor de una expresión gettype: Obtener representación legible del tipo is_tipo: Comprobar tipo: (is_int, is_string, etc.) $n = 10; // $n es integer $b = (boolean) $n; // $b es boolean $edad = 21; // $edad es entera $edad = "Joven"; // $edad es String
  • 25. Constantes globales Se crean usando la función define() Su valor no puede alterarse ni pueden redefinirse Ámbito global Sólo existen constantes de los tipos escalares Hay muchas constantes predefinidas Dependen de módulos disponibles Si se usa una constante no definida, se define sobre la marcha y su valor será un string con su nombre define('ALTURA_MAXIMA',200); echo ALTURA_MAXIMA; // se referencian sin comillas
  • 26. Operadores Aritméticos: +, -, *, /, % Asignación = Combinado para todos los aritméticos y strings (+=, .=) Bits: &, |, ^, ~, <<, >> Con Strings, operan sobre los bytes de los caracteres Lógicos: and, or, xor, !, &&, || Comparación: ==,===,!=,<>,!==,<,>,<=,>=,?: Incremento: --, ++ (pre y postfijo)
  • 27. Operadores Concatenación de Strings: . y .= Control de errores: @ (variable $php_errormsg) Ejecución: ` ... ` (acento grave). Ejecuta algo en el SO y la salida es el valor de la expresión.
  • 29. Condicional if (condición) { sentencias; } else { sentencias; } if (condición) { sentencias; } if (condición) { sentencias; } elseif (condición2) { sentencias; } else { sentencias; } Operador condicional ? (condición)? valor1 : valor2 Sentencia if
  • 30. Sintaxis alternativa if (condición): sentencias; else: sentencias; endif; La sintaxis alternativa es muy útil cuando se mezcla con HTML <?php if ($usuario_ok) :?> <p>Usuario registrado ?></p> <?php else: ?> <p>Usuario no válido ?> </p> <?php endif ?> Puede utilizarse también con otras estructuras de control: while, for, foreach y switch
  • 31. switch switch ($nombre) { case 'Juan' : // sentencias break; case 'Luis' : // sentencias break; default : // sentencias break; } Similar a lenguaje C
  • 32. while, do...while, for Similares a C, C++, Java,... $total = 0; $i = 1; while ($i <= 10) { $total += $i; $i++; } echo $total; // 55 $total = 0; $i = 1; do { $total += $i; $i++; } while ($i <= 10); echo $total; // 55 También se puede utilizar break y continue $total = 0; for ($i = 0; $i <= 10; $i++) { $total += $i; } echo $total; // 55
  • 33. foreach Iteraciones sobre los valores de un array $lista = array(1,2,3,4,5); foreach($lista as $valor) { echo $valor; } $lista = array("ana" => 4, "mar" => 7, "luis" => 2); foreach($lista as $clave=>$valor) { echo "$clave tiene un $valor"; } foreach ($array as $v) { sentencias; } foreach ($array as $k => $v) { sentencias; }
  • 34. Excepciones: try...catch...throw Similares a Java PHP 5.5 admite finally function inverso($x) { if (!$x) { throw new Exception('Div. cero.'); } return 1/$x; } try { echo inverso(5) . "n"; echo inverso(0) . "n"; } catch (Exception $e) { echo 'Excepción capturada: ', $e->getMessage(), "n"; } NOTA: El valor lanzado mediante throw debe ser de clase Exception o de una subclase de Exception
  • 35. exit, return, die exit finaliza la ejecución Parámetro opcional: nº (status de salida), mensaje return Finaliza la ejecución del cuerpo de una función Dentro de un script, finaliza el script die(mensaje) similar a exit(mensaje) $db = mysql_connect("localhost", $USERNAME, $PASSWORD); if (!$db) { die("No se puede conectar a base de datos"); } $db = mysql_connect("localhost", $USERNAME, $PASSWORD) or die("No se puede conectar a base de datos"); Suele escribirse como: Ejemplo
  • 36. goto Continuar la ejecución en otro lugar El lugar se indica mediante una etiqueta Debe estar en el mismo ámbito En general, siempre se puede escribir de otra forma for ($i = 0; $i < $count; $i++) { // sentencias... if ($error) { goto finalizar; } } finalizar: // sentencias... Goto Statement considered harmful
  • 37. Funciones en PHP Declaración mediante function Puede utilizarse recursividad Nombres de funciones no sensibles mayúsculas/minúsculas function factorial($num) { if ($num == 0) return 1; elseif ($num > 0) return $num * factorial($num - 1); else throw new Exception ( "Argumento negativo" ); } echo Factorial(5); // 120
  • 38. Ejercicios PHP Utilizando PHPUnit, implementar: factores($n): calcula los factores primos de un nº https://gist.github.com/labra/0430c8f00db9f4198421
  • 39. Funciones en PHP No existe sobrecarga de funciones, no se pueden redefinir funciones ni eliminar funciones ya definidas Visibilidad de las variables Cualquier referencia a variables dentro del cuerpo de la función se entiende como referencia local Si la variable no se declara en el interior de la función, su uso produce una declaración implícita Consecuencia: variables globales no visibles desde las funciones A menos que se declaren como global
  • 40. Parámetros por valor Paso por valor Mecanismo por defecto Si se modifica dentro, no afecta a la variable pasada $x = 1; // variable global function f($x) { $x++ ; // variable local } f($x); echo $x; // imprime 1
  • 41. Parámetros por referencia Paso por referencia Se indica mediante & antes del parámetro Si se modifica dentro, afecta a la variable pasada $x = 1; // variable global function f(&$x) { $x++ ; // variable local } f($x); echo $x; // imprime 2
  • 42. Parámetros con valor por defecto Parámetros con valor por defecto Si no se pasa valor, se inicializa al valor por defecto Se pueden tener cualquier nº de parámetros por defecto Restricción: los parámetros por defecto deben ir después del resto de parámetros function f2($x = "Juan") { echo "Hola $x" ; } f2("Luis"); // Hola Luis f2(); // Hola Juan
  • 43. Parámetros variables Se declara la función sin parámetros func_num_args() devuelve nº de argumentos func_get_arg(n) devuelve argumento n function sumaArgumentos() { $suma = 0; for ($i = 0; $i < func_num_args(); $i++) { $suma += func_get_arg($i); } return $suma; } echo sumaArgumentos(1, 5, 9); // 15 echo sumaArgumentos(1, 5); // 6 echo sumaArgumentos(); // 0
  • 44. Parámetros con tipo Puede declararse tipo de parámetros Invocar con tipo incorrecto  Error ejecución No se utiliza con tipos escalares Se utiliza con clases, interfaces, arrays class Animal {} class Perro extends Animal {} class Casa {} function respira(Animal $a) { echo "Respirando..." ; } respira(new Animal); // ok respira(new Perro); // ok respira(new Casa); // error
  • 45. Devolver valores Mediante return se devuelve un valor Para devolver varios valores (utilizar array) Si no se devuelve nada se asume NULL Normalmente se hace una copia al devolver Puede usarse & para devolver una referencia No es necesario para mejorar rendimiento function devuelve2() { return array("Juan",23); }
  • 46. Funciones anónimas ó clausuras PHP permite utilizar funciones sin nombre Útil para crear funciones de forma rápida Funciones que admiten funciones como parámetros Pueden asignarse a variables $lista = array("pepe","federico","juan","ana"); $filtro = array_filter($lista, function($n) { return (strlen($n) == 4); }); // pepe, juan $suma = function($a,$b) { return $a + $b; }; echo $suma(2,3);
  • 47. Funciones predefinidas: strings PHP tiene gran cantidad de funciones predefinidas y bibliotecas chr: devuelve carácter dado el código ASCII chunk_split: divide string en líneas de longitud fija count_chars: nº de caracteres en un string echo: imprime en la página resultante uno o más strings No es una función, sino un elemento del lenguaje implode/join: concatena varios strings usando otra cadena como "pegamento" (ambos nombres son equivalentes) ltrim, rtrim, trim: eliminan espacio en blanco de un string printf / sprintf / scanf: similares a C substr_count: cuenta ocurrencias de substrings substr_replace: sustituye ocurrencias de substrings
  • 48. Funciones predefinidas: strings (II) strlen: calcula longitud de un string strip_tags: elimina etiquetas HTML y PHP de un string strcmp, strncmp... Comparación de strings Tratamiento avanzado soundex levenshtein similar_text parse_str (analizar cadena tipo GET y fijar variables)
  • 49. Funciones predefinidas: manejo de ficheros Permiten trabajar con ficheros remotos Algunas solo funcionan con ficheros locales (ejemplo: fileatime) fopen, fclose chgrp, chmod, chown feof fgetc, fgets, fscanf tmpfile copy, delete, rename parse_ini_file fileperms, filesize, file_exists, file_get_contents [muchas más]
  • 50. Funciones predefinidas: configuración Función phpinfo() Si se incluye en una página, ofrece todo tipo de detalles sobre configuración, servidor, variables disponibles, etc. Muy útil para el desarrollador (conocer detalles del servidor) Por supuesto, ofrecer sus resultados al público puede comprometer la seguridad del sitio Función phpversion() Devuelve la versión de PHP que se está usando
  • 51. Clases y Objetos Las últimas versiones de PHP soportan POO class Persona { private $nombre, $edad; function __construct($nombre,$edad=0) { $this->nombre= $nombre; $this->edad = $edad; } function envejecer() { $this->edad++; } function toString() { return $this->nombre . ': ' . $this->edad . ' años'; } } $juan = new Persona("Juan",23); $juan->envejecer(); echo $juan->toString(); Juan: 24 años Constructor. También puede usarse: __destruct()
  • 52. Herencia Mediante extends se permite herencia simple class Empleado extends Persona { private $empresa; function __construct($nombre,$edad,$empresa) { parent::__construct($nombre,$edad); $this->empresa = $empresa; } } $personas = array(new Persona("Pepe",22), new Empleado("Luis",34,"IBM")); foreach ($personas as $p) $p->envejecer(); foreach ($personas as $p) echo $p->toString(); Pepe: 23 años Luis: 35 años Persona Empleado
  • 53. Clases abstractas abstract class Figura { private $x, $y; function __construct($x, $y) { $this->x = $x; $this->y = $y; } abstract function area(); function mover($dx,$dy) { $this->x+=$dx; $this->y+=$dy; } } class Circulo extends Figura { private $radio ; function __construct($radio,$x,$y) { parent::__construct($x,$y); $this->radio = $radio; } function area() { return pi() * pow($this->radio,2); } }
  • 54. Ejercicio Figuras Crear una clase Figura con 2 atributos (x,y) Método que permita mover la figura Crear una clase Rect para representar Rectángulos Atributos a (ancho) y b (altura) Crear una clase Circulo para representar Círculos Atributo r (radio) Crear método area() para calcular el área Crear método area_figuras() que calcula el área de una lista de figuras https://gist.github.com/labra/507059826c2bd2e9b694
  • 55. Ejercicio con agregación Modelar cursos con alumnos Una clase curso compuesta por: Nombre del curso Lista de alumnos Una clase alumno compuesta por id del alumno nota del alumno Definir métodos de curso: getNota(id) ponNota(id,nota) media Curso Alumno 1..n1 https://gist.github.com/labra/1f8ed2a054936bbdd4cc
  • 56. Constantes Constantes dentro de una clase Su valor no puede modificarse Pueden accederse mediante :: ó mediante self class MétodoPago { const TARJETA_CREDITO = 'CREDITO'; const CONTADO = 'CONTADO'; } echo MétodoPago::TARJETA_CREDITO;
  • 57. Interfaces Describen conjuntos de métodos y constantes Permiten herencia múltiple interface a { function a(); } interface b { function b(); } class AB implements a, b { function a() { echo "AB implementa a"; } function b() { echo "AB implementa b"; } }
  • 58. Traits Permiten reutilizar métodos entre clases trait Saludador { function saluda($nombre) { echo "Hola $nombre! soy un " . get_class($this); } } class Coche { use Saludador; // ... } $c = new Coche; $a = new Lápiz; $c->saluda("Pepe"); // Hola Pepe! soy un Coche $a->saluda("Juan"); // Hola Juan! soy un Lápiz class Lápiz { use Saludador; // ... }
  • 59. Modularización require(nombreFichero) Incluye (y evalúa) el fichero Si no lo encuentra, error fatal y fin de ejecución include(nombreFichero) Como require(), pero si el fichero no aparece se produce sólo un warning. require_once, include_once Como las anteriores pero sólo carga el fichero una vez
  • 60. Ejercicio Hashes y Arrays Corregir exámenes. Aciertos: +1, fallos: -0.25 [ {"pregunta" => 1, "correcta" => "a"}, {"pregunta" => 2, "correcta" => "b"}] [ {"alumno" => 2456, "respuestas" => [{ "pregunta" => 1, "respuesta" => "a"}, { "pregunta" => 2, "respuesta" => "b"}]}, {"alumno" => 4321, "respuestas" => [{ "pregunta" => 1, "respuesta" => "b"}, { "pregunta" => 2, "respuesta" => "b"}]}] [ {"alumno" => 2456, "nota" => 2}, {"alumno" => 4321, "nota" => 0.75}] https://gist.github.com/labra/de3923e1e4753bd1756b
  • 62. WWW GET http://ejemplo.com/form.html <form method="post" action="http://ejemplo.com/procesa"> <label>Nombre: <input name="cliente"></label><br> <label>Correo electrónico: <input name="correo"></label><br> <button>Enviar</button> </form> Formularios en la Web Usuario Servidor POST http://ejemplo.com/procesa cliente = pepe correo = pepe@kiko.com http://ejemplo.com/form.html form.html
  • 63. <?php if ($_SERVER['REQUEST_METHOD']=='POST') { echo "<h1>Hola {$_POST['cliente']}</h1>"; echo "<p>Email: {$_POST['correo']}</p>"; } else { die("Invocación incorrecta"); } ?> WWW Procesando un formulario Valores accesibles en arrays $_POST, $_GET, etc. GET http://ejemplo.com/form.html Usuario Servidor POST http://ejemplo.com/procesa cliente = pepe correo = pepe@kiko.com form.html resultado <h1>Hola Pepe</h1> <p>Email: pepe@kiko.com</p>
  • 64. Todo en un solo fichero PHP <html><head><title>Formulario</title></head> <body> <?php if ($_SERVER['REQUEST_METHOD'] == 'GET') : ?> <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST"> <label>Nombre: <input name="cliente"></label><br> <label>Correo electrónico: <input name="correo" type="email"></label><br> <button>Enviar</button> </form> <?php else ($_SERVER['REQUEST_METHOD'] == 'POST') : echo "<h1>Hola {$_POST['cliente']}</h1>"; echo "<p>Email: {$_POST['correo']}</p>"; else: die("Sólo se admiten peticiones GET y POST."); endif ?> </body></html>
  • 65. Formularios y PHP Valores accesibles mediante arrays globales: $_POST valores pasados usando método POST $_GET valores pasados usando método GET $_COOKIE valores pasados mediante cookies $_FILES ficheros que han sido subidos (uploaded) $_SERVER información sobre el servidor $_ENV información sobre el entorno $_REQUEST junta $_GET, $_POST y $_COOKIE en uno
  • 66. Subiendo ficheros Array $_FILES contiene información name: nombre del fichero type: tipo MIME size: tamaño tmp_name: nombre del fichero temporal en el sistema de archivos del servidor 2 funciones útiles: is_uploaded_file: true si el fichero se subió move_uploaded_file: mueve el fichero subido
  • 67. Técnicas Web en PHP header permite enviar cabeceras HTTP <?php switch ($_GET['formato']) { case 'xml': header('Content-type: application/xml'); echo "<alumno id='23'><nombre>Pepe</nombre></alumno>"; break; default: header('Content-type: text/html'); echo "<html><h1>Pepe</h1></html>"; break; } ?>
  • 68. Manipulando XML PHP contiene varios procesadores de XML Analizador SAX (basado en eventos) DOM SimpleXML
  • 69. Cargar/Validar XML Clase DOMDocument contiene métodos de manipulación DOM load: carga fichero XML validate: valida contra un DTD schemavalidate: valida contra un Schema saveXML: guarda fichero XML en un String save: guarda en fichero $doc = new DomDocument(); $doc->load($fileName); if ($doc->schemaValidate($schemaFile)) echo "Válido"; else echo "No Válido";
  • 70. Crear XML mediante DOM $lista = array("Pepe","Juan"); $doc = new DOMDocument("1.0"); $alumnos = $doc->appendChild($doc->createElement('alumnos')); foreach ($lista as $n) { $alumno = $alumnos->appendChild($doc->createElement('alumno')); $nombre = $alumno->appendChild($doc->createElement('nombre')); $nombre->appendChild($doc->createTextNode($n)); } header("Content-type: text/xml"); echo $doc->saveXML(); <alumnos> <alumno> <nombre>Pepe</nombre> </alumno> <alumno> <nombre>Juan</nombre> </alumno> </alumnos>
  • 71. Acceder mediante XPath Clase DOMXPath $doc = new DomDocument(); $doc->load("alumnos.xml"); $expr = new DOMXPath($doc); $nombres = $expr->query("//nombre"); foreach ($nombres as $n) { echo $n->nodeValue . "<br/>" ; }
  • 72. Transformar mediante XSLT Clase XSLTProcessor $doc = new DOMDocument(); $doc->load("alumnos.xml"); $xsl = new DOMDocument(); $xsl->load("alumnos.xsl"); $xslProc = new XSLTProcessor(); $xslProc->importStylesheet($xsl); $newDoc = $xslProc->transformToDoc($doc); echo $newDoc->saveHTML();
  • 73. Ventajas de PHP Tecnología del servidor Gran cantidad de módulos desarrollados por terceros Bibliotecas para "casi todo" Soporte en gran cantidad de servidores Gratuito y no-propietario Muy dinámico (muchas cosas se resuelven en ejecución) Uso extendido Mucha documentación
  • 74. 74 Desventajas de PHP Lenguaje interpretado  Eficiencia? Sin comprobación estática de tipos Errores en tiempo de ejecución Detalles de sintaxis poco habituales Uso de -> en vez de . Uso de $ con las variables