SlideShare a Scribd company logo
1 of 14
Tutorial de PHP
Este artículo es un pequeño (relativamente) tutorial de PHP en el que intentaré explicar lo
más importante del lenguaje de forma concisa.
Introducción
PHP es un lenguaje de script, multiplataforma, publicado bajo una licencia libre, que se
suele utilizar del lado del servidor para crear páginas web dinámicas. A día de hoy es el
tercer lenguaje mas popular del mercado según el índice TIOBE, sólo por detrás de Java y
C.
Creado por Rasmus Lerdorf en 1995, su nombre es (actualmente) un acrónimo recursivo
de “PHP: Hypertext Preprocessor” (Preprocesador de Hipertexto PHP).
La última versión estable a la hora de escribir estas líneas, la cuál se puede descargar
desde su página web, es la 5.3.1, de Noviembre de 2009.
Ya explicamos hace tiempo cómo instalar Apache, y cómo instalar PHP y MySQL en
Windows. También es posible descargar aplicaciones que instalen las 3 herramientas
rápida y fácilmente (no recomendado para entornos de producción), como WampServer o
XAMPP.
Primer programa en PHP
Creemos una primera pequeña página web dinámica, que mostrará la fecha y hora actual.
1. <html>
2. <head><title>Fecha y hora</title></head>
3. <body>
4. <?php
5. // Esto imprime la fecha
6. echo "Hoy es ", date("d/n/Y");
7. echo "<br/>";
8. // Y esto la hora
9. echo "Son las ", date("h:m:s");
10. ?>
11. </body>
Además de usando la sintaxis anterior, <?php .... ?>, que es lo más común y recomendable,
también se puede insertar código PHP en documentos HTML usando:
• <script language="php"> .... </script>
• <? .... ?> si está activada la opción short_open_tag en php.ini
• <% .... %> si está activada la opción asp_tags en php.ini
Esto no es Python: cada instrucción termina con ‘;’ (no es necesario si es la última
instrucción).
Para los comentarios se puede utilizar:
1. /* varias
2. lineas */
3.
4. // una linea
5.
6. # una linea
Aunque no es una característica integrada en el lenguaje, para comentarios de
documentación se suele utilizar PHPDoc, el equivalente al JavaDoc de Java en PHP.
1. /**
2. * Ejemplo de documentación de una función
3. * @param int $foo un entero cualquiera
4. */
Para imprimir datos por pantalla se puede usar, entre otros, echo, print, printf o print_r.
A echo se le pasa una cadena que imprimirá. No es necesario utilizar paréntesis porque no
es una función. También se le puede pasar varias cadenas, separadas por comas, y este las
imprimirá todas unas detrás de otra, sin dejar espacios entre ellas:
1. echo "Hola ", "mundo ", "en PHP";
print funciona de forma similar a echo, pero no puede tomar varios argumentos, y devuelve
un valor de retorno. Debido a esto es algo más lento que echo.
1. print "Hola mundo";
A diferencia de echo y print, printf sí que es una función. Se comporta de manera similar a la
función del mismo nombre de C, es decir, se pueden utilizar especificadores de formato.
En el siguiente ejemplo $nombre y $edad serían variables con el nombre y la edad de una
persona, y su valor se embebería en la cadena en las posiciones indicadas por %s
(especificador de cadena) y %d (especificador de entero).
1. printf("%s tiene %d años", $nombre, $edad);
print_r es una función que podemos utilizar para la depuración. Su función es la de
imprimir variables de forma legible para las personas. Por ejemplo, si le pasáramos una
matriz, imprimiría sus claves y valores
1. print_r($matriz);
Variables
El nombre de las variables debe comenzar siempre con ‘$’.
PHP tiene tipado dinámico: al crear una variable no se especifica el tipo, sino que el
intérprete de PHP lo determina en tiempo de ejecución según el contexto.
1. $texto = "Hola mundo";
En PHP tenemos como tipos simples los booleanos (boolean), números enteros (integer),
números en coma flotante (float) y cadenas (string). Como tipos compuestos tenemos
matrices (array) y objetos (object). Además tenemos un par de tipos especiales: resource,
enteros que se usan para referenciar recursos; y NULL, el tipo nulo.
Para obtener el tipo de una variable se puede utilizar gettype($var)
1. $texto = "Hola mundo";
2. echo gettype($texto);
Para obtener el tipo y otra información sobre la variable, como los valores para un array o
las propiedades de un objeto, se puede utilizar var_dump($var)
1. $texto = "Hola mundo";
2. echo var_dump($texto);
El tipo de una variable puede cambiar según el valor que almacenemos en ella.
1. $variable = "Hola mundo";
2. echo gettype($variable), "<br/>";
3. $variable = 22;
4. echo gettype($variable);
Además las variables tienen tipado débil, y su tipo puede cambiar según el uso que
queramos hacer de ellas.
1. $variable = "22";
2. echo $variable / 2;
Para comprobar si una variable es de un cierto tipo se pueden utilizar las funciones is_tipo,
como is_bool($var), is_string($var), is_object($var), is_float($var)…
Para comprobar si una variable tiene un valor asociado se puede utilizar la función
isset($var).
Para crear constantes se usa la función define. Al no ser variables propiamente dichas, no
se utiliza el caracter $ al principio.
1. define("PI", 3.14159);
2. echo "Pi es ", PI;
Como hay un carácter que identifica las variables, podemos introducirlas directamente en
una cadena, y PHP la sustituirá por su valor. No tenemos por qué hacer algo como
1. $usuario = "Juan";
2. echo "Hola ", $usuario";
sino que podríamos hacer simplemente
1. $usuario = "Juan";
2. echo "Hola $usuario";
Si necesitamos indicar el final del nombre de la variable explícitamente se pueden utilizar
llaves. En el siguiente código, por ejemplo, si no utilizáramos llaves el intérprete buscaría
una variable de nombre $productos.
1. $producto = "Donut";
2. echo "Le gustan los {$producto}s";
También se puede utilizar la misma sintaxis para hacer cosas más complejas, como llamar
a funciones dentro de la cadena:
1. echo "Ha comprado {$objeto.contar()} platos";
Operadores
Los operadores aritméticos son la suma (+), resta (-), multiplicación (*), división (/) y
módulo (%).
Operadores de comparación
Operador Descripción
== true si ambos operandos son iguales
!= true si ambos operandos son distintos
=== true si ambos operandos son iguales, no sólo en valor, sino también en tipo
!== true si ambos operandos son distintos, en valor o tipo
< true si el primer operando es menor que el segundo
> true si el primer operando es mayor que el segundo
<= true si el primer operando es menor o igual que el segundo
>= true si el primer operando es mayor o igual que el segundo
Operadores lógicos
Operador Descripción
and / && true si se cumplen ambas condiciones
or / || true si se cumple una de las condiciones
xor true si se cumple sólo una de las condiciones
! true si no se cumple la condición
Booleanos
Las variables de tipo booleano pueden tener como valor true o false. Son equivalentes a
false el 0, una cadena vacía, un array vacío y NULL.
Arrays
Para crear un array se utiliza la función del mismo nombre.
1. $codigos = array(0 => "España", 1 => "Italia");
Como clave se pueden usar números, como una matriz normal, o cadenas, para crear un
diccionario o array asociativo.
1. $codigos = array("ES" => "España", "IT" => "Italia");
Si no se especifica una clave se usa el último índice + 1, o bien 0 si no se ha especificado
ningún índice aún:
1. $codigos = array("España", "Italia");
2. $dias = array(1 => "Lunes", "Martes", "Miércoles");
También se puede crear una matriz usando los corchetes, elemento por elemento:
1. $matriz[0] = "Hola ";
2. $matriz[1] = "mundo";
Si no se especifica la clave ocurre lo mismo que con la función array; se usa el último índice
+ 1, o 0 si no se ha especificado ningún índice todavía:
1. $matriz[] = "Hola ";
2. $matriz[] = "mundo";
Para modificar un valor, también se usan los corchetes:
1. $matriz[0] = "Hello ";
Para eliminar un par clave-valor se puede usar la función unset($var)
1. unset($matriz[0]);
unset es una función que sirve para eliminar una variable dada, así que podríamos eliminar
la propia matriz haciendo
1. unset($matriz);
Para contar el número de elementos en el array se puede usar la función count($var), que
también se puede usar con los objetos para contar el número de propiedades que tiene.
Para ordenar los elementos de la matriz se puede usar
• sort($array)
• rsort($array), ordena en orden inverso
• array_multisort($array), para arrays multidimensionales
• asort($array), ordena manteniendo la asociación de índices
• arsort($array), ordena en orden inverso, manteniendo la asociación de índices
• ksort($array), ordena por clave
• krsort($array), ordena por clave en orden inverso
• natsort($array), ordena usando un algoritmo de “orden natural”, es decir, como
ordenaría una persona. Mantiene la asociación de índices
• uasort($array, $funcion), ordena usando una función definida por el usuario,
mateniendo la asociación de índices
• uksort($array, $funcion), ordena usando una función definida por el usuario usando las
claves
• usort($array, $funcion), ordena usando una función definida por el usuario
Para comprobar si un determinado elemento está dentro de un array se usa in_array. PHP
indexa todos los valores de los arrays, así que es mucho más rápido usar esta función que
un bucle que compruebe uno por uno.
1. in_array("pepe", $usuarios);
Cadenas
Las cadenas se pueden delimitar de 4 formas. Con dobles comillas, en cuyo caso se
pueden utilizar caracteres especiales, como n o t, y se sustituyen las variables por sus
valores:
1. $usuario = "Juan";
2. $mensaje = "<pre>Holan$usuario</pre>";
3. echo $mensaje;
comillas simples, en las que se NO se pueden utilizar caracteres especiales, ni se
sustituyen las variables por sus valores. Debido a esto dan un rendimiento marginalmente
mejor que las dobles comillas:
1. $usuario = "Juan";
2. $mensaje = '<pre>Holan$usuario</pre>';
3. echo $mensaje;
sintaxis heredoc, en las que, como en las dobles comillas, se pueden utilizar caracteres
especiales y se sustituyen las variables por sus valores. No se necesitan escapar las
comillas si queremos imprimirlas, y se puede escribir el texto en varias líneas:
1. $mensaje = <<< IDENTIFICADOR
2. Ejemplo de cadena
3. que ocupa
4. varias líneas
5. IDENTIFICADOR;
6. echo $mensaje;
sintaxis nowdoc, similar a heredoc, pero no se sustituyen las variables por sus valores:
1. $mensaje = <<< 'IDENTIFICADOR'
2. Ejemplo de cadena
3. que ocupa
4. varias líneas
5. IDENTIFICADOR;
6. echo $mensaje;
Una vez creada se puede acceder a posiciones de la cadena como si de una matriz se
tratara
1. $cadena = "Hola mundo";
2. echo $cadena[5];
e incluso modificar posiciones de igual forma
1. $cadena = "Hola amigo";
2. $cadena[9] = "a";
3. echo $cadena;
Se pueden concatenar cadenas con el operador ‘.’:
1. $conc = "Hola " . "mundo";
2. echo $conc;
Para obtener el número de caracteres que tiene una cadena se utiliza la función
strlen($cadena).
Para obtener parte de una cadena se utiliza la función substr($cadena, $inicio, $tamanyo)
1. $cadena = "Hola mundo";
2. echo substr($cadena, 5, 3);
Para reemplazar una subcadena por otra se puede utilizar substr_replace($cadena, $reemplazo,
$inicio, $tamanyo)
1. $cadena = "Hola mundo";
2. echo substr_replace($cadena, "Arman", 5, 3);
Para reemplazar todas las ocurrencias de una cadena por otra se puede utilizar la función
str_replace($subcadena, $reemplazo, $cadena, &$ocurrencias)
1. $cadena = "Hola mundo";
2. echo str_replace("o", "a", $cadena);
Se puede dividir una cadena en partes utilizando un cierto delimitador con la función
explode($delimitador, $cadena, $limite)
1. $cadena = "Hola mundo";
2. $palabras = explode(" ", $cadena);
3. print_r($palabras);
Para buscar una subcadena dentro de la cadena se puede utilizar la función strpos($cadena,
$subcadena, $offset)
1. $cadena = "Hola mundo";
2. $subcadena = "m";
3. $posicion = strpos($cadena, $subcadena);
Control de flujo
Condicionales
1. if ($condicion) {
2. echo "Se cumple la primera condición";
3. } elseif ($condicion2) {
4. echo "No se cumple la primera condición, pero sí la segunda";
5. else {
6. echo "No se cumple ninguna de las 2 condiciones";
7. }
1. switch($usuario) {
2. case "admin":
3. echo "Bienvenido Dr. Falken";
4. break;
5. case "zootropo":
6. echo "Hola Raúl";
7. break;
8. default:
9. echo "Lo siento Dave, me temo que no puedo hacer eso";
10. break;
11. }
Bucles
1. for ($contador = 0; $contador < 10; $contador++) {
2. echo "Contador vale $contador<br/>";
3. }
Para recorrer los valores de un array es útil la construcción foreach, que recorre cada valor
de la matriz uno por uno, incluidos los valores cuya clave asociada no es un número
1. foreach ($_SERVER as $var){
2. echo "$var<br/><br/>";
3. }
También se puede hacer que nos de tanto la clave como el valor:
1. foreach ($_SERVER as $key => $var){
2. echo "<strong>$key</strong> = $var<br/><br/>";
3. }
1. $contador = 0;
2. while ($contador <= 10) {
3. echo "Contador vale $contador<br/>";
4. $contador++;
5. }
1. $contador = -1;
2. do {
3. echo "Contador vale $contador<br/>";
4. $contador++;
5. } while ($contador <= 10);
Se puede usar continue para continuar con la próxima iteración del bucle y break para salir
del bucle. Una curiosidad es que se puede usar break 2, por ejemplo, y eso haría que se
saliera de dos bucles que estuvieran uno dentro del otro.
Funciones
La palabra clave para definir una función en PHP es function.
1. function saludar() {
2. echo "Hola";
3. }
Para devolver un valor se utiliza return
1. function obtenerCuadrado($numero) {
2. return $numero * $numero;
3. }
Por defecto los parámetros de la función se pasan por valor. Para pasarlos por referencia
se añade & antes del nombre de la variable en la lista de argumentos:
1. function obtenerCuadrado(&$numero) {
2. $numero = $numero * $numero;
3. }
4.
5. $valor = 4;
6. obtenerCuadrado($valor);
7. echo $valor;
Se puede especificar valores por defecto para argumentos con la sintaxis:
1. function saludar($nombre="Raul") {
2. echo "Hola $nombre";
3. }
Para crear funciones con un número de parámetros variable se deja la lista de argumentos
vacía y se usan las funciones func_get_args() para obtener una lista de los parámetros
pasados, func_num_args() para obtener el número de parámetros y
func_get_arg($num_argumento) para obtener un parámetro a partir de su índice.
1. function sumar() {
2. $suma = 0;
3. foreach(func_get_args() as $param)
4. $suma += $param;
5. return $suma;
6. }
PHP posee características de los lenguajes funcionales: se puede utilizar las funciones
como si de otro tipo de variable cualquiera se tratara.
También se pueden crear funciones anónimas:
1. $lambda = function($num1, $num2){ return $num1 + $num2;};
2. echo $lambda(1, 2);
Orientación a objetos
Una clase se declara con la palabra clave class seguida del nombre de la clase.
1. class MiClase {
2. }
El constructor es una función con nombre __construct(), y el destructor, __destruct.
1. class MiClase {
2. function __construct() {
3. echo "Estamos creando un objeto de tipo MiClase<br/>";
4. }
5. }
Para instanciar un nuevo objeto a partir de una clase se usa la sentencia new.
1. $objeto = new MiClase();
2. $objeto2 = new MiClase;
Para acceder a las propiedades y métodos se usa “->” en lugar del típico “.”
1. class MiClase {
2. function __construct() {
3. echo "Dentro del constructor<br/>";
4. }
5.
6. function saludar() {
7. echo "Hola<br/>";
8. }
9. }
10. $objeto = new MiClase();
11. $objeto->saludar();
Hay 3 modificadores de acceso: public (por defecto), protected y private.
$this es el equivalente al this de Java o el self de Python.
1. class Persona {
2. function __construct($nombre) {
3. $this->nombre = $nombre;
4. }
5. }
6.
7. $persona = new Persona("Juan");
8. echo $persona->nombre;
Las propiedades y métodos estáticos se crean con la palabra clave static. Una peculiaridad
es que para acceder a los miembros estáticos se utiliza la sintaxis $objeto::$miembro, y no
$objeto->miembro. Además se utiliza self en lugar de $this.
1. class Persona {
2. public static $contador = 0;
3.
4. function __construct($nombre) {
5. $this->nombre = $nombre;
6. self::$contador++;
7. }
8. }
9. $persona = new Persona("Juan");
10. echo $persona::$contador, "<br/>";
11.
12. $persona = new Persona("Pepe");
13. echo $persona::$contador, "<br/>";
14.
15. echo Persona::$contador, "<br/>";
Para heredar de otra clase se usa la palabra clave extends. PHP no soporta la herencia
múltiple.
1. class Empleado extends Persona {
2. }
Para crear una interfaz se utiliza la palabra clave interface.
1. interface Figura {
2. function calcularArea();
3. }
para implementar la interfaz, se utiliza la palabara clave implements
1. class Cuadrado implements Figura {
2. // ...
3.
4. function calcularArea() {
5. return $this->lado * $this->lado;
6. }
7. }
Tratamiento de errores
En PHP hay dos sistemas de notificación de errores: excepciones, como en Java o Python,
y el sistema de reporte de errores del lenguaje. No es muy común ver el uso de
excepciones en el codigo PHP, sólo se utiliza en el código más moderno que hace uso de la
orientación a objetos.
La captura de excepciones tiene este aspecto:
1. function dividir($num1, $num2) {
2. if($num2 == 0)
3. throw new Exception('No se puede dividir entre 0');
4. else
5. return $num1 / $num2;
6. }
7.
8. try {
9. dividir(5, 0);
10. } catch (Exception $e) {
11. echo 'Ocurrió una excepción: ', $e->getMessage(), "n";
12. }
En el caso de los errores, podemos lanzar los nuestros propios usando la función
trigger_error($mensaje, $tipo). El tipo de error puede ser E_USER_ERROR, E_USER_WARNING o
E_USER_NOTICE
1. trigger_error("No se pudo conectar a la base de datos", E_USER_ERROR);
También podemos definir nuestro propio manejador para tratar nosotros mismos los
errores, en lugar de PHP, utilizando la función set_error_handler.
En desarrollo nos interesa mostrar los errores y avisos de PHP en pantalla. En producción
se debería modificar la opción display_errors de php.ini y ponerla a Off para deshabilitarlo. La
opción error_reporting permite configurar qué tipo de errores queremos mostrar.
Existe un operador que permite que una cierta sentencia de código no genere errores, @,
aunque su uso no está aconsejado.
PHP y MySQL
La mejor forma de utilizar MySQL desde PHP es mediante la interfaz orientada a objetos
de la extensión mysqli. Si no estamos seguros de si vamos a tener que cambiar de base de
datos también podemos utilizar la extensión PDO (PHP Data Objects), una capa de
abstracción incluida por defecto desde PHP 5.1
Primero creamos el objeto correspondiente con new mysqli($host, $usuario, $password, $bbdd)
1. $mysqli = new mysqli("localhost", "root", "mipassword", "mibbdd");
Una vez hecho esto podemos comprobar si ha habido algún error mediante la propiedad
connect_error. Este propiedad contiene una cadena describiendo el error que se ha
producido, o una cadena vacía si no hubo ningún error.
1. if (mysqli_connect_errno())
2. exit("Se produjo un error: ", mysqli_connect_error());
Una vez abierta la conexión podemos comenzar a realizar consultas utilizando el método
query. Este devuelve true si se llevó a cabo la consulta correctamente.
1. if ($mysqli->query("CREATE TABLE Personas(id int, nombre varchar(30))")) {
2. echo "Tabla personas creada";
3. } else {
4. echo "Error al crear la tabla personas";
5. }
En las consultas que modifican tuplas el número de tuplas afectadas se almacena en la
propiedad affected_rows
1. $mysqli->query("UPDATE Empleados SET prima=2000 WHERE ventas > 5000");
2. echo "Primas modificadas: ", $mysqli->affected_rows;
Para recorrer las tuplas devueltas por un SELECT haríamos algo así
1. if ($resultado = $mysqli->query("SELECT * FROM Empleados")) {
2. while($empleado = $resultado->fetch_object()) {
3. printf("%s %s<br/>", $empleado->Nombre, $empleado->Apellidos);
4. }
5. }
Al finalizar se debe cerrar la conexión utilizando el método close()
1. $mysqli->close()
Para evitar ciertos ataques de SQL injection es conveniente pasar las cadenas que vengan
del usuario por el método mysqli::escape_string($cadena), para escapar los caracteres
especiales, o bien utilizar prepared staments.
Para crear prepared staments se utilizar el método mysqli->prepare($consulta), después se
llama al método bind_param del objeto stament creado, para introducir los valores
correspondientes en los placeholders y, después, execute() para ejecutar la consulta. Por
último se llama al método close para cerar el stament
1. if ($consulta = $mysqli->prepare("SELECT a FROM b")) {
2. $consulta->bind_param($campo, $tabla);
3. $consulta->execute();
4. $consulta->close();
5. }
Si necesitas más información sobre MySQL en sí, puedes consultar nuestro Tutorial de
MySQL
Formularios
Al enviar un formulario, si se utiliza el método POST, el valor de cada campo rellenado por
el usuario se guardará en una matriz asociativa de nombre $_POST. Si se utiliza GET, se
almacenará en la matriz $_GET. Las claves de esta matriz asociativa se tomarán del atributo
name de cada campo del formulario.
Si no nos importa el origen de la petición, también se puede usar $_REQUEST["nombre"], que
es una mezcla de la información de $_GET, $_POST y $_COOKIE (efectivamente, un array con
los valores de las cookies)
Para un select, que tiene varios valores, el valor del atributo name debe acabar con [],
como una matriz. PHP creará una matriz con este nombre, que contendrá los valores de
los atributos name de las opciones seleccionadas.
1. <select name="languages[]">
2. <input name="c">C</input>
3. <input name="c++">C++</input>
4. <input name="php">PHP</input>
5. <input name="perl">Perl</input>
6. </select>
$_SERVER['PHP_SELF'] contiene la URL del script actual. Puede ser útil como valor para el
atributo action del formulario.
Si la entrada del usuario se va a mostrar en algún lugar del sitio, para evitar
vulnerabilidades de XSS, este texto debería pasar antes por la función
htmlspecialchars($cadena), que convierte a sus entidades HTML correspondientes los
caracteres especiales “, <, >, & y, opcionalmente, ‘, si pasamos como segundo argumento
a la función la constante ENT_QUOTES.
1. echo 'Hola ', htmlspecialchars($_POST['usuario']);
Si el texto se va a utilizar en un atributo de una etiqueta HTML hay que asegurarse de que
los valores de los atributos estén entre comillas, y que el tipo de comillas utilizado esté
codificado como entidades HTML en la cadena.
También hay que tener cuidado con la codificación de caracteres. Si el atacante utilizara
un texto codificado en UTF-7, htmlspecialchars no reemplazaría nada, y si no especificamos
la codificación del documento, y el atacante engaña al navegador para hacerle pensar que
UTF-7 es la verdadera codificación del archivo, nuestro filtrado no habrá servido de nada.
Podemos especificar la codificación de caracteres con una etiqueta meta o usando la
cabecera Content-Type:
1. header('Content-Type: text/html; charset=UTF-8');
Cookies
Para crear cookies usamos setcookie($nombre, $valor, $expiracion, $ruta, $host, $https)
1. // Expira 3600 segundos después de haberse creado
2. setcookie('usuario', 'raul', time() + 3600);
3. setcookie('fondo', '#000000');
A las cookies se accede a través de la matriz superglobal $_COOKIE:
1. echo 'Bienvenido ', $_COOKIE['usuario'];
Sesiones
Para crear una sesión se llama a la función session_start(), que debe ser la primera sentencia
PHP de la página.
Para almacenar datos en la sesión se puede utilizar la matriz superglobal $_SESSION
directamente:
1. $_SESSION['usuario'] = 'raul';
Para acceder a los datos que hemos guardado en la sesión se utiliza el mismo array
asociativo:
1. echo 'Bienvenido ', $_SESSION['usuario'];

More Related Content

What's hot (19)

Semana 6 Módulos en Python Entrega 2
Semana 6   Módulos en Python Entrega 2Semana 6   Módulos en Python Entrega 2
Semana 6 Módulos en Python Entrega 2
 
Semana 1 Estructuras de Control en Java
Semana 1   Estructuras de Control en JavaSemana 1   Estructuras de Control en Java
Semana 1 Estructuras de Control en Java
 
Guia poo
Guia pooGuia poo
Guia poo
 
Semana 4 Javascript funciones y Metodos
Semana 4   Javascript funciones y MetodosSemana 4   Javascript funciones y Metodos
Semana 4 Javascript funciones y Metodos
 
Curso python
Curso pythonCurso python
Curso python
 
Los scripts de linux
Los scripts de linuxLos scripts de linux
Los scripts de linux
 
Tema3 p2%20
Tema3 p2%20Tema3 p2%20
Tema3 p2%20
 
Introduccion a python 3
Introduccion a python 3Introduccion a python 3
Introduccion a python 3
 
Python para principiantes
Python para principiantesPython para principiantes
Python para principiantes
 
Taller de PHP Básico
Taller de PHP BásicoTaller de PHP Básico
Taller de PHP Básico
 
Php basico
Php basicoPhp basico
Php basico
 
Python (ejercicios)
Python (ejercicios)Python (ejercicios)
Python (ejercicios)
 
Sesion1 Php Basico
Sesion1 Php BasicoSesion1 Php Basico
Sesion1 Php Basico
 
Estructuras básicas para C++
Estructuras básicas para C++Estructuras básicas para C++
Estructuras básicas para C++
 
Presentacion Python
Presentacion  Python Presentacion  Python
Presentacion Python
 
Desarrollar un módulo para Visuse
Desarrollar un módulo para VisuseDesarrollar un módulo para Visuse
Desarrollar un módulo para Visuse
 
Semana 1 Estructuras de Datos en Java
Semana 1   Estructuras de Datos en JavaSemana 1   Estructuras de Datos en Java
Semana 1 Estructuras de Datos en Java
 
4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario
 
C++ y sus librerias
C++ y sus libreriasC++ y sus librerias
C++ y sus librerias
 

Viewers also liked

Presentación1prehistora
Presentación1prehistoraPresentación1prehistora
Presentación1prehistoraElenaps12
 
La sombra por tec.feliton
La sombra por tec.felitonLa sombra por tec.feliton
La sombra por tec.felitonFeliton Boneti
 
El Reciclaje. Andrés F. y Miguel
El Reciclaje. Andrés F. y MiguelEl Reciclaje. Andrés F. y Miguel
El Reciclaje. Andrés F. y MiguelAngelita Ferrer
 
Vortrag Histocamp 2015 - mGuide
Vortrag Histocamp 2015 - mGuideVortrag Histocamp 2015 - mGuide
Vortrag Histocamp 2015 - mGuideTobias Arendt
 
Multiscreen Experience (Jan 2012, IxDA Berlin)
Multiscreen Experience (Jan 2012, IxDA Berlin)Multiscreen Experience (Jan 2012, IxDA Berlin)
Multiscreen Experience (Jan 2012, IxDA Berlin)Wolfram Nagel
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)Hankyo
 

Viewers also liked (11)

Presentación1prehistora
Presentación1prehistoraPresentación1prehistora
Presentación1prehistora
 
PresentaciónB1
PresentaciónB1PresentaciónB1
PresentaciónB1
 
La sombra por tec.feliton
La sombra por tec.felitonLa sombra por tec.feliton
La sombra por tec.feliton
 
Aufblasbarer Whirlpool Guide
Aufblasbarer Whirlpool GuideAufblasbarer Whirlpool Guide
Aufblasbarer Whirlpool Guide
 
El Reciclaje. Andrés F. y Miguel
El Reciclaje. Andrés F. y MiguelEl Reciclaje. Andrés F. y Miguel
El Reciclaje. Andrés F. y Miguel
 
Vortrag Histocamp 2015 - mGuide
Vortrag Histocamp 2015 - mGuideVortrag Histocamp 2015 - mGuide
Vortrag Histocamp 2015 - mGuide
 
Multiscreen Experience (Jan 2012, IxDA Berlin)
Multiscreen Experience (Jan 2012, IxDA Berlin)Multiscreen Experience (Jan 2012, IxDA Berlin)
Multiscreen Experience (Jan 2012, IxDA Berlin)
 
Manual de-word-y-excel-avanzados
Manual de-word-y-excel-avanzadosManual de-word-y-excel-avanzados
Manual de-word-y-excel-avanzados
 
Historia del hip hop
Historia del hip hopHistoria del hip hop
Historia del hip hop
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)
 
Tecnologia base tercero 16
Tecnologia base tercero 16Tecnologia base tercero 16
Tecnologia base tercero 16
 

Similar to Tutorial de php (20)

php Fundamentos
php Fundamentos php Fundamentos
php Fundamentos
 
Php
PhpPhp
Php
 
Tema2[php]
Tema2[php]Tema2[php]
Tema2[php]
 
Proyectos Web 3 Introduccion Php
Proyectos Web   3 Introduccion PhpProyectos Web   3 Introduccion Php
Proyectos Web 3 Introduccion Php
 
Elementos del Hardware y Software
Elementos del Hardware y SoftwareElementos del Hardware y Software
Elementos del Hardware y Software
 
Curso php-my sql-clase-4
Curso php-my sql-clase-4Curso php-my sql-clase-4
Curso php-my sql-clase-4
 
Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
 
Php basico
Php basicoPhp basico
Php basico
 
Arrays renderizables y Estándares de codificación en Drupal
Arrays renderizables y Estándares de codificación en DrupalArrays renderizables y Estándares de codificación en Drupal
Arrays renderizables y Estándares de codificación en Drupal
 
Ensayo php
Ensayo phpEnsayo php
Ensayo php
 
Manual de php basico
Manual de php basicoManual de php basico
Manual de php basico
 
Php Basico
Php BasicoPhp Basico
Php Basico
 
Presentacion
PresentacionPresentacion
Presentacion
 
Programación en Perl
Programación en PerlProgramación en Perl
Programación en Perl
 
Ensayo de php
Ensayo de phpEnsayo de php
Ensayo de php
 
Mini manual php
Mini manual phpMini manual php
Mini manual php
 
Programacion php
Programacion phpProgramacion php
Programacion php
 
Introducción a php
Introducción a phpIntroducción a php
Introducción a php
 
Shell script
Shell scriptShell script
Shell script
 
Guia programacionwebbasicophp
Guia programacionwebbasicophpGuia programacionwebbasicophp
Guia programacionwebbasicophp
 

More from Robert Rodriguez

Modelo Entidad Relacion ,Base de datos
Modelo Entidad Relacion ,Base de datosModelo Entidad Relacion ,Base de datos
Modelo Entidad Relacion ,Base de datosRobert Rodriguez
 
Modelo Entidad Relacion E-R
Modelo Entidad Relacion E-RModelo Entidad Relacion E-R
Modelo Entidad Relacion E-RRobert Rodriguez
 
Diseño Logico de base de datos
Diseño Logico de base de datosDiseño Logico de base de datos
Diseño Logico de base de datosRobert Rodriguez
 
Diseño Logico - Diseño de bases de datos relacionales
Diseño Logico - Diseño de bases de datos relacionalesDiseño Logico - Diseño de bases de datos relacionales
Diseño Logico - Diseño de bases de datos relacionalesRobert Rodriguez
 
Diseño Logico de Base de datos Relacionales
Diseño Logico de Base de datos RelacionalesDiseño Logico de Base de datos Relacionales
Diseño Logico de Base de datos RelacionalesRobert Rodriguez
 
Base de Datos, Diseño Comceptual , logico y Fisico
Base de Datos, Diseño Comceptual , logico y FisicoBase de Datos, Diseño Comceptual , logico y Fisico
Base de Datos, Diseño Comceptual , logico y FisicoRobert Rodriguez
 
Teoria del modelado de objetos otros diagramas actividad despliegue
Teoria del modelado de objetos otros diagramas actividad despliegueTeoria del modelado de objetos otros diagramas actividad despliegue
Teoria del modelado de objetos otros diagramas actividad despliegueRobert Rodriguez
 
Teoria del modelado de objetos modificado
Teoria del modelado de objetos modificadoTeoria del modelado de objetos modificado
Teoria del modelado de objetos modificadoRobert Rodriguez
 
Modelado Estrcutural, Modelado Estructural Casos De USO
Modelado Estrcutural, Modelado Estructural Casos De USOModelado Estrcutural, Modelado Estructural Casos De USO
Modelado Estrcutural, Modelado Estructural Casos De USORobert Rodriguez
 
Modelado funcional casos de uso
Modelado funcional casos de usoModelado funcional casos de uso
Modelado funcional casos de usoRobert Rodriguez
 
Que es Ingenieria del Software?,
Que es Ingenieria del Software?,Que es Ingenieria del Software?,
Que es Ingenieria del Software?,Robert Rodriguez
 
Diseño logico de una base de datos
Diseño logico de  una base de datosDiseño logico de  una base de datos
Diseño logico de una base de datosRobert Rodriguez
 
Casos de Uso - Juan Bernardo Quintero
Casos de Uso - Juan Bernardo QuinteroCasos de Uso - Juan Bernardo Quintero
Casos de Uso - Juan Bernardo QuinteroRobert Rodriguez
 
Que son los editores WYSIWYG ? ,
Que son los editores WYSIWYG ? , Que son los editores WYSIWYG ? ,
Que son los editores WYSIWYG ? , Robert Rodriguez
 
Diagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, AsistenciaDiagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, AsistenciaRobert Rodriguez
 
Contenido de las paginas webs
Contenido de las paginas websContenido de las paginas webs
Contenido de las paginas websRobert Rodriguez
 
Análisis Microsoft Word 2010
Análisis Microsoft Word 2010Análisis Microsoft Word 2010
Análisis Microsoft Word 2010Robert Rodriguez
 
Mantenimiento Preventivo, Correctivo
Mantenimiento Preventivo, CorrectivoMantenimiento Preventivo, Correctivo
Mantenimiento Preventivo, CorrectivoRobert Rodriguez
 
Descripcion y analisis de los elementos del proyecto (desde el problema hasta...
Descripcion y analisis de los elementos del proyecto (desde el problema hasta...Descripcion y analisis de los elementos del proyecto (desde el problema hasta...
Descripcion y analisis de los elementos del proyecto (desde el problema hasta...Robert Rodriguez
 

More from Robert Rodriguez (20)

Modelo Entidad Relacion ,Base de datos
Modelo Entidad Relacion ,Base de datosModelo Entidad Relacion ,Base de datos
Modelo Entidad Relacion ,Base de datos
 
Modelo Entidad Relacion E-R
Modelo Entidad Relacion E-RModelo Entidad Relacion E-R
Modelo Entidad Relacion E-R
 
Diseño Logico de base de datos
Diseño Logico de base de datosDiseño Logico de base de datos
Diseño Logico de base de datos
 
Diseño Logico - Diseño de bases de datos relacionales
Diseño Logico - Diseño de bases de datos relacionalesDiseño Logico - Diseño de bases de datos relacionales
Diseño Logico - Diseño de bases de datos relacionales
 
Diseño Logico de Base de datos Relacionales
Diseño Logico de Base de datos RelacionalesDiseño Logico de Base de datos Relacionales
Diseño Logico de Base de datos Relacionales
 
Base de Datos, Diseño Comceptual , logico y Fisico
Base de Datos, Diseño Comceptual , logico y FisicoBase de Datos, Diseño Comceptual , logico y Fisico
Base de Datos, Diseño Comceptual , logico y Fisico
 
Teoria del modelado de objetos otros diagramas actividad despliegue
Teoria del modelado de objetos otros diagramas actividad despliegueTeoria del modelado de objetos otros diagramas actividad despliegue
Teoria del modelado de objetos otros diagramas actividad despliegue
 
Teoria del modelado de objetos modificado
Teoria del modelado de objetos modificadoTeoria del modelado de objetos modificado
Teoria del modelado de objetos modificado
 
Modelado Estrcutural, Modelado Estructural Casos De USO
Modelado Estrcutural, Modelado Estructural Casos De USOModelado Estrcutural, Modelado Estructural Casos De USO
Modelado Estrcutural, Modelado Estructural Casos De USO
 
Modelado funcional casos de uso
Modelado funcional casos de usoModelado funcional casos de uso
Modelado funcional casos de uso
 
Que es Ingenieria del Software?,
Que es Ingenieria del Software?,Que es Ingenieria del Software?,
Que es Ingenieria del Software?,
 
Diseño logico de una base de datos
Diseño logico de  una base de datosDiseño logico de  una base de datos
Diseño logico de una base de datos
 
Casos de Uso - Juan Bernardo Quintero
Casos de Uso - Juan Bernardo QuinteroCasos de Uso - Juan Bernardo Quintero
Casos de Uso - Juan Bernardo Quintero
 
Que son los editores WYSIWYG ? ,
Que son los editores WYSIWYG ? , Que son los editores WYSIWYG ? ,
Que son los editores WYSIWYG ? ,
 
Diagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, AsistenciaDiagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, Asistencia
 
Contenido de las paginas webs
Contenido de las paginas websContenido de las paginas webs
Contenido de las paginas webs
 
Análisis Microsoft Word 2010
Análisis Microsoft Word 2010Análisis Microsoft Word 2010
Análisis Microsoft Word 2010
 
Mantenimiento Preventivo, Correctivo
Mantenimiento Preventivo, CorrectivoMantenimiento Preventivo, Correctivo
Mantenimiento Preventivo, Correctivo
 
Descripcion y analisis de los elementos del proyecto (desde el problema hasta...
Descripcion y analisis de los elementos del proyecto (desde el problema hasta...Descripcion y analisis de los elementos del proyecto (desde el problema hasta...
Descripcion y analisis de los elementos del proyecto (desde el problema hasta...
 
Tutorial Microsoft Access
Tutorial Microsoft AccessTutorial Microsoft Access
Tutorial Microsoft Access
 

Recently uploaded

LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)veganet
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPELaura Chacón
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
La evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundariaLa evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundariamarco carlos cuyo
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadJonathanCovena1
 

Recently uploaded (20)

LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPE
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
La evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundariaLa evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundaria
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la Sostenibilidad
 

Tutorial de php

  • 1. Tutorial de PHP Este artículo es un pequeño (relativamente) tutorial de PHP en el que intentaré explicar lo más importante del lenguaje de forma concisa. Introducción PHP es un lenguaje de script, multiplataforma, publicado bajo una licencia libre, que se suele utilizar del lado del servidor para crear páginas web dinámicas. A día de hoy es el tercer lenguaje mas popular del mercado según el índice TIOBE, sólo por detrás de Java y C. Creado por Rasmus Lerdorf en 1995, su nombre es (actualmente) un acrónimo recursivo de “PHP: Hypertext Preprocessor” (Preprocesador de Hipertexto PHP). La última versión estable a la hora de escribir estas líneas, la cuál se puede descargar desde su página web, es la 5.3.1, de Noviembre de 2009. Ya explicamos hace tiempo cómo instalar Apache, y cómo instalar PHP y MySQL en Windows. También es posible descargar aplicaciones que instalen las 3 herramientas rápida y fácilmente (no recomendado para entornos de producción), como WampServer o XAMPP. Primer programa en PHP Creemos una primera pequeña página web dinámica, que mostrará la fecha y hora actual. 1. <html> 2. <head><title>Fecha y hora</title></head> 3. <body> 4. <?php 5. // Esto imprime la fecha 6. echo "Hoy es ", date("d/n/Y"); 7. echo "<br/>"; 8. // Y esto la hora 9. echo "Son las ", date("h:m:s"); 10. ?> 11. </body> Además de usando la sintaxis anterior, <?php .... ?>, que es lo más común y recomendable, también se puede insertar código PHP en documentos HTML usando: • <script language="php"> .... </script> • <? .... ?> si está activada la opción short_open_tag en php.ini • <% .... %> si está activada la opción asp_tags en php.ini Esto no es Python: cada instrucción termina con ‘;’ (no es necesario si es la última instrucción).
  • 2. Para los comentarios se puede utilizar: 1. /* varias 2. lineas */ 3. 4. // una linea 5. 6. # una linea Aunque no es una característica integrada en el lenguaje, para comentarios de documentación se suele utilizar PHPDoc, el equivalente al JavaDoc de Java en PHP. 1. /** 2. * Ejemplo de documentación de una función 3. * @param int $foo un entero cualquiera 4. */ Para imprimir datos por pantalla se puede usar, entre otros, echo, print, printf o print_r. A echo se le pasa una cadena que imprimirá. No es necesario utilizar paréntesis porque no es una función. También se le puede pasar varias cadenas, separadas por comas, y este las imprimirá todas unas detrás de otra, sin dejar espacios entre ellas: 1. echo "Hola ", "mundo ", "en PHP"; print funciona de forma similar a echo, pero no puede tomar varios argumentos, y devuelve un valor de retorno. Debido a esto es algo más lento que echo. 1. print "Hola mundo"; A diferencia de echo y print, printf sí que es una función. Se comporta de manera similar a la función del mismo nombre de C, es decir, se pueden utilizar especificadores de formato. En el siguiente ejemplo $nombre y $edad serían variables con el nombre y la edad de una persona, y su valor se embebería en la cadena en las posiciones indicadas por %s (especificador de cadena) y %d (especificador de entero). 1. printf("%s tiene %d años", $nombre, $edad); print_r es una función que podemos utilizar para la depuración. Su función es la de imprimir variables de forma legible para las personas. Por ejemplo, si le pasáramos una matriz, imprimiría sus claves y valores 1. print_r($matriz); Variables El nombre de las variables debe comenzar siempre con ‘$’. PHP tiene tipado dinámico: al crear una variable no se especifica el tipo, sino que el intérprete de PHP lo determina en tiempo de ejecución según el contexto. 1. $texto = "Hola mundo"; En PHP tenemos como tipos simples los booleanos (boolean), números enteros (integer), números en coma flotante (float) y cadenas (string). Como tipos compuestos tenemos matrices (array) y objetos (object). Además tenemos un par de tipos especiales: resource, enteros que se usan para referenciar recursos; y NULL, el tipo nulo.
  • 3. Para obtener el tipo de una variable se puede utilizar gettype($var) 1. $texto = "Hola mundo"; 2. echo gettype($texto); Para obtener el tipo y otra información sobre la variable, como los valores para un array o las propiedades de un objeto, se puede utilizar var_dump($var) 1. $texto = "Hola mundo"; 2. echo var_dump($texto); El tipo de una variable puede cambiar según el valor que almacenemos en ella. 1. $variable = "Hola mundo"; 2. echo gettype($variable), "<br/>"; 3. $variable = 22; 4. echo gettype($variable); Además las variables tienen tipado débil, y su tipo puede cambiar según el uso que queramos hacer de ellas. 1. $variable = "22"; 2. echo $variable / 2; Para comprobar si una variable es de un cierto tipo se pueden utilizar las funciones is_tipo, como is_bool($var), is_string($var), is_object($var), is_float($var)… Para comprobar si una variable tiene un valor asociado se puede utilizar la función isset($var). Para crear constantes se usa la función define. Al no ser variables propiamente dichas, no se utiliza el caracter $ al principio. 1. define("PI", 3.14159); 2. echo "Pi es ", PI; Como hay un carácter que identifica las variables, podemos introducirlas directamente en una cadena, y PHP la sustituirá por su valor. No tenemos por qué hacer algo como 1. $usuario = "Juan"; 2. echo "Hola ", $usuario"; sino que podríamos hacer simplemente 1. $usuario = "Juan"; 2. echo "Hola $usuario"; Si necesitamos indicar el final del nombre de la variable explícitamente se pueden utilizar llaves. En el siguiente código, por ejemplo, si no utilizáramos llaves el intérprete buscaría una variable de nombre $productos. 1. $producto = "Donut"; 2. echo "Le gustan los {$producto}s"; También se puede utilizar la misma sintaxis para hacer cosas más complejas, como llamar a funciones dentro de la cadena: 1. echo "Ha comprado {$objeto.contar()} platos";
  • 4. Operadores Los operadores aritméticos son la suma (+), resta (-), multiplicación (*), división (/) y módulo (%). Operadores de comparación Operador Descripción == true si ambos operandos son iguales != true si ambos operandos son distintos === true si ambos operandos son iguales, no sólo en valor, sino también en tipo !== true si ambos operandos son distintos, en valor o tipo < true si el primer operando es menor que el segundo > true si el primer operando es mayor que el segundo <= true si el primer operando es menor o igual que el segundo >= true si el primer operando es mayor o igual que el segundo Operadores lógicos Operador Descripción and / && true si se cumplen ambas condiciones or / || true si se cumple una de las condiciones xor true si se cumple sólo una de las condiciones ! true si no se cumple la condición Booleanos Las variables de tipo booleano pueden tener como valor true o false. Son equivalentes a false el 0, una cadena vacía, un array vacío y NULL. Arrays Para crear un array se utiliza la función del mismo nombre. 1. $codigos = array(0 => "España", 1 => "Italia"); Como clave se pueden usar números, como una matriz normal, o cadenas, para crear un diccionario o array asociativo. 1. $codigos = array("ES" => "España", "IT" => "Italia"); Si no se especifica una clave se usa el último índice + 1, o bien 0 si no se ha especificado ningún índice aún: 1. $codigos = array("España", "Italia"); 2. $dias = array(1 => "Lunes", "Martes", "Miércoles"); También se puede crear una matriz usando los corchetes, elemento por elemento: 1. $matriz[0] = "Hola ";
  • 5. 2. $matriz[1] = "mundo"; Si no se especifica la clave ocurre lo mismo que con la función array; se usa el último índice + 1, o 0 si no se ha especificado ningún índice todavía: 1. $matriz[] = "Hola "; 2. $matriz[] = "mundo"; Para modificar un valor, también se usan los corchetes: 1. $matriz[0] = "Hello "; Para eliminar un par clave-valor se puede usar la función unset($var) 1. unset($matriz[0]); unset es una función que sirve para eliminar una variable dada, así que podríamos eliminar la propia matriz haciendo 1. unset($matriz); Para contar el número de elementos en el array se puede usar la función count($var), que también se puede usar con los objetos para contar el número de propiedades que tiene. Para ordenar los elementos de la matriz se puede usar • sort($array) • rsort($array), ordena en orden inverso • array_multisort($array), para arrays multidimensionales • asort($array), ordena manteniendo la asociación de índices • arsort($array), ordena en orden inverso, manteniendo la asociación de índices • ksort($array), ordena por clave • krsort($array), ordena por clave en orden inverso • natsort($array), ordena usando un algoritmo de “orden natural”, es decir, como ordenaría una persona. Mantiene la asociación de índices • uasort($array, $funcion), ordena usando una función definida por el usuario, mateniendo la asociación de índices • uksort($array, $funcion), ordena usando una función definida por el usuario usando las claves • usort($array, $funcion), ordena usando una función definida por el usuario Para comprobar si un determinado elemento está dentro de un array se usa in_array. PHP indexa todos los valores de los arrays, así que es mucho más rápido usar esta función que un bucle que compruebe uno por uno. 1. in_array("pepe", $usuarios); Cadenas Las cadenas se pueden delimitar de 4 formas. Con dobles comillas, en cuyo caso se pueden utilizar caracteres especiales, como n o t, y se sustituyen las variables por sus valores: 1. $usuario = "Juan"; 2. $mensaje = "<pre>Holan$usuario</pre>"; 3. echo $mensaje;
  • 6. comillas simples, en las que se NO se pueden utilizar caracteres especiales, ni se sustituyen las variables por sus valores. Debido a esto dan un rendimiento marginalmente mejor que las dobles comillas: 1. $usuario = "Juan"; 2. $mensaje = '<pre>Holan$usuario</pre>'; 3. echo $mensaje; sintaxis heredoc, en las que, como en las dobles comillas, se pueden utilizar caracteres especiales y se sustituyen las variables por sus valores. No se necesitan escapar las comillas si queremos imprimirlas, y se puede escribir el texto en varias líneas: 1. $mensaje = <<< IDENTIFICADOR 2. Ejemplo de cadena 3. que ocupa 4. varias líneas 5. IDENTIFICADOR; 6. echo $mensaje; sintaxis nowdoc, similar a heredoc, pero no se sustituyen las variables por sus valores: 1. $mensaje = <<< 'IDENTIFICADOR' 2. Ejemplo de cadena 3. que ocupa 4. varias líneas 5. IDENTIFICADOR; 6. echo $mensaje; Una vez creada se puede acceder a posiciones de la cadena como si de una matriz se tratara 1. $cadena = "Hola mundo"; 2. echo $cadena[5]; e incluso modificar posiciones de igual forma 1. $cadena = "Hola amigo"; 2. $cadena[9] = "a"; 3. echo $cadena; Se pueden concatenar cadenas con el operador ‘.’: 1. $conc = "Hola " . "mundo"; 2. echo $conc; Para obtener el número de caracteres que tiene una cadena se utiliza la función strlen($cadena). Para obtener parte de una cadena se utiliza la función substr($cadena, $inicio, $tamanyo) 1. $cadena = "Hola mundo"; 2. echo substr($cadena, 5, 3); Para reemplazar una subcadena por otra se puede utilizar substr_replace($cadena, $reemplazo, $inicio, $tamanyo) 1. $cadena = "Hola mundo";
  • 7. 2. echo substr_replace($cadena, "Arman", 5, 3); Para reemplazar todas las ocurrencias de una cadena por otra se puede utilizar la función str_replace($subcadena, $reemplazo, $cadena, &$ocurrencias) 1. $cadena = "Hola mundo"; 2. echo str_replace("o", "a", $cadena); Se puede dividir una cadena en partes utilizando un cierto delimitador con la función explode($delimitador, $cadena, $limite) 1. $cadena = "Hola mundo"; 2. $palabras = explode(" ", $cadena); 3. print_r($palabras); Para buscar una subcadena dentro de la cadena se puede utilizar la función strpos($cadena, $subcadena, $offset) 1. $cadena = "Hola mundo"; 2. $subcadena = "m"; 3. $posicion = strpos($cadena, $subcadena); Control de flujo Condicionales 1. if ($condicion) { 2. echo "Se cumple la primera condición"; 3. } elseif ($condicion2) { 4. echo "No se cumple la primera condición, pero sí la segunda"; 5. else { 6. echo "No se cumple ninguna de las 2 condiciones"; 7. } 1. switch($usuario) { 2. case "admin": 3. echo "Bienvenido Dr. Falken"; 4. break; 5. case "zootropo": 6. echo "Hola Raúl"; 7. break; 8. default: 9. echo "Lo siento Dave, me temo que no puedo hacer eso"; 10. break; 11. } Bucles 1. for ($contador = 0; $contador < 10; $contador++) {
  • 8. 2. echo "Contador vale $contador<br/>"; 3. } Para recorrer los valores de un array es útil la construcción foreach, que recorre cada valor de la matriz uno por uno, incluidos los valores cuya clave asociada no es un número 1. foreach ($_SERVER as $var){ 2. echo "$var<br/><br/>"; 3. } También se puede hacer que nos de tanto la clave como el valor: 1. foreach ($_SERVER as $key => $var){ 2. echo "<strong>$key</strong> = $var<br/><br/>"; 3. } 1. $contador = 0; 2. while ($contador <= 10) { 3. echo "Contador vale $contador<br/>"; 4. $contador++; 5. } 1. $contador = -1; 2. do { 3. echo "Contador vale $contador<br/>"; 4. $contador++; 5. } while ($contador <= 10); Se puede usar continue para continuar con la próxima iteración del bucle y break para salir del bucle. Una curiosidad es que se puede usar break 2, por ejemplo, y eso haría que se saliera de dos bucles que estuvieran uno dentro del otro. Funciones La palabra clave para definir una función en PHP es function. 1. function saludar() { 2. echo "Hola"; 3. } Para devolver un valor se utiliza return 1. function obtenerCuadrado($numero) { 2. return $numero * $numero; 3. } Por defecto los parámetros de la función se pasan por valor. Para pasarlos por referencia se añade & antes del nombre de la variable en la lista de argumentos: 1. function obtenerCuadrado(&$numero) { 2. $numero = $numero * $numero; 3. } 4.
  • 9. 5. $valor = 4; 6. obtenerCuadrado($valor); 7. echo $valor; Se puede especificar valores por defecto para argumentos con la sintaxis: 1. function saludar($nombre="Raul") { 2. echo "Hola $nombre"; 3. } Para crear funciones con un número de parámetros variable se deja la lista de argumentos vacía y se usan las funciones func_get_args() para obtener una lista de los parámetros pasados, func_num_args() para obtener el número de parámetros y func_get_arg($num_argumento) para obtener un parámetro a partir de su índice. 1. function sumar() { 2. $suma = 0; 3. foreach(func_get_args() as $param) 4. $suma += $param; 5. return $suma; 6. } PHP posee características de los lenguajes funcionales: se puede utilizar las funciones como si de otro tipo de variable cualquiera se tratara. También se pueden crear funciones anónimas: 1. $lambda = function($num1, $num2){ return $num1 + $num2;}; 2. echo $lambda(1, 2); Orientación a objetos Una clase se declara con la palabra clave class seguida del nombre de la clase. 1. class MiClase { 2. } El constructor es una función con nombre __construct(), y el destructor, __destruct. 1. class MiClase { 2. function __construct() { 3. echo "Estamos creando un objeto de tipo MiClase<br/>"; 4. } 5. } Para instanciar un nuevo objeto a partir de una clase se usa la sentencia new. 1. $objeto = new MiClase(); 2. $objeto2 = new MiClase; Para acceder a las propiedades y métodos se usa “->” en lugar del típico “.” 1. class MiClase {
  • 10. 2. function __construct() { 3. echo "Dentro del constructor<br/>"; 4. } 5. 6. function saludar() { 7. echo "Hola<br/>"; 8. } 9. } 10. $objeto = new MiClase(); 11. $objeto->saludar(); Hay 3 modificadores de acceso: public (por defecto), protected y private. $this es el equivalente al this de Java o el self de Python. 1. class Persona { 2. function __construct($nombre) { 3. $this->nombre = $nombre; 4. } 5. } 6. 7. $persona = new Persona("Juan"); 8. echo $persona->nombre; Las propiedades y métodos estáticos se crean con la palabra clave static. Una peculiaridad es que para acceder a los miembros estáticos se utiliza la sintaxis $objeto::$miembro, y no $objeto->miembro. Además se utiliza self en lugar de $this. 1. class Persona { 2. public static $contador = 0; 3. 4. function __construct($nombre) { 5. $this->nombre = $nombre; 6. self::$contador++; 7. } 8. } 9. $persona = new Persona("Juan"); 10. echo $persona::$contador, "<br/>"; 11. 12. $persona = new Persona("Pepe"); 13. echo $persona::$contador, "<br/>"; 14. 15. echo Persona::$contador, "<br/>"; Para heredar de otra clase se usa la palabra clave extends. PHP no soporta la herencia múltiple.
  • 11. 1. class Empleado extends Persona { 2. } Para crear una interfaz se utiliza la palabra clave interface. 1. interface Figura { 2. function calcularArea(); 3. } para implementar la interfaz, se utiliza la palabara clave implements 1. class Cuadrado implements Figura { 2. // ... 3. 4. function calcularArea() { 5. return $this->lado * $this->lado; 6. } 7. } Tratamiento de errores En PHP hay dos sistemas de notificación de errores: excepciones, como en Java o Python, y el sistema de reporte de errores del lenguaje. No es muy común ver el uso de excepciones en el codigo PHP, sólo se utiliza en el código más moderno que hace uso de la orientación a objetos. La captura de excepciones tiene este aspecto: 1. function dividir($num1, $num2) { 2. if($num2 == 0) 3. throw new Exception('No se puede dividir entre 0'); 4. else 5. return $num1 / $num2; 6. } 7. 8. try { 9. dividir(5, 0); 10. } catch (Exception $e) { 11. echo 'Ocurrió una excepción: ', $e->getMessage(), "n"; 12. } En el caso de los errores, podemos lanzar los nuestros propios usando la función trigger_error($mensaje, $tipo). El tipo de error puede ser E_USER_ERROR, E_USER_WARNING o E_USER_NOTICE 1. trigger_error("No se pudo conectar a la base de datos", E_USER_ERROR); También podemos definir nuestro propio manejador para tratar nosotros mismos los errores, en lugar de PHP, utilizando la función set_error_handler.
  • 12. En desarrollo nos interesa mostrar los errores y avisos de PHP en pantalla. En producción se debería modificar la opción display_errors de php.ini y ponerla a Off para deshabilitarlo. La opción error_reporting permite configurar qué tipo de errores queremos mostrar. Existe un operador que permite que una cierta sentencia de código no genere errores, @, aunque su uso no está aconsejado. PHP y MySQL La mejor forma de utilizar MySQL desde PHP es mediante la interfaz orientada a objetos de la extensión mysqli. Si no estamos seguros de si vamos a tener que cambiar de base de datos también podemos utilizar la extensión PDO (PHP Data Objects), una capa de abstracción incluida por defecto desde PHP 5.1 Primero creamos el objeto correspondiente con new mysqli($host, $usuario, $password, $bbdd) 1. $mysqli = new mysqli("localhost", "root", "mipassword", "mibbdd"); Una vez hecho esto podemos comprobar si ha habido algún error mediante la propiedad connect_error. Este propiedad contiene una cadena describiendo el error que se ha producido, o una cadena vacía si no hubo ningún error. 1. if (mysqli_connect_errno()) 2. exit("Se produjo un error: ", mysqli_connect_error()); Una vez abierta la conexión podemos comenzar a realizar consultas utilizando el método query. Este devuelve true si se llevó a cabo la consulta correctamente. 1. if ($mysqli->query("CREATE TABLE Personas(id int, nombre varchar(30))")) { 2. echo "Tabla personas creada"; 3. } else { 4. echo "Error al crear la tabla personas"; 5. } En las consultas que modifican tuplas el número de tuplas afectadas se almacena en la propiedad affected_rows 1. $mysqli->query("UPDATE Empleados SET prima=2000 WHERE ventas > 5000"); 2. echo "Primas modificadas: ", $mysqli->affected_rows; Para recorrer las tuplas devueltas por un SELECT haríamos algo así 1. if ($resultado = $mysqli->query("SELECT * FROM Empleados")) { 2. while($empleado = $resultado->fetch_object()) { 3. printf("%s %s<br/>", $empleado->Nombre, $empleado->Apellidos); 4. } 5. } Al finalizar se debe cerrar la conexión utilizando el método close() 1. $mysqli->close() Para evitar ciertos ataques de SQL injection es conveniente pasar las cadenas que vengan del usuario por el método mysqli::escape_string($cadena), para escapar los caracteres especiales, o bien utilizar prepared staments.
  • 13. Para crear prepared staments se utilizar el método mysqli->prepare($consulta), después se llama al método bind_param del objeto stament creado, para introducir los valores correspondientes en los placeholders y, después, execute() para ejecutar la consulta. Por último se llama al método close para cerar el stament 1. if ($consulta = $mysqli->prepare("SELECT a FROM b")) { 2. $consulta->bind_param($campo, $tabla); 3. $consulta->execute(); 4. $consulta->close(); 5. } Si necesitas más información sobre MySQL en sí, puedes consultar nuestro Tutorial de MySQL Formularios Al enviar un formulario, si se utiliza el método POST, el valor de cada campo rellenado por el usuario se guardará en una matriz asociativa de nombre $_POST. Si se utiliza GET, se almacenará en la matriz $_GET. Las claves de esta matriz asociativa se tomarán del atributo name de cada campo del formulario. Si no nos importa el origen de la petición, también se puede usar $_REQUEST["nombre"], que es una mezcla de la información de $_GET, $_POST y $_COOKIE (efectivamente, un array con los valores de las cookies) Para un select, que tiene varios valores, el valor del atributo name debe acabar con [], como una matriz. PHP creará una matriz con este nombre, que contendrá los valores de los atributos name de las opciones seleccionadas. 1. <select name="languages[]"> 2. <input name="c">C</input> 3. <input name="c++">C++</input> 4. <input name="php">PHP</input> 5. <input name="perl">Perl</input> 6. </select> $_SERVER['PHP_SELF'] contiene la URL del script actual. Puede ser útil como valor para el atributo action del formulario. Si la entrada del usuario se va a mostrar en algún lugar del sitio, para evitar vulnerabilidades de XSS, este texto debería pasar antes por la función htmlspecialchars($cadena), que convierte a sus entidades HTML correspondientes los caracteres especiales “, <, >, & y, opcionalmente, ‘, si pasamos como segundo argumento a la función la constante ENT_QUOTES. 1. echo 'Hola ', htmlspecialchars($_POST['usuario']); Si el texto se va a utilizar en un atributo de una etiqueta HTML hay que asegurarse de que los valores de los atributos estén entre comillas, y que el tipo de comillas utilizado esté codificado como entidades HTML en la cadena. También hay que tener cuidado con la codificación de caracteres. Si el atacante utilizara un texto codificado en UTF-7, htmlspecialchars no reemplazaría nada, y si no especificamos
  • 14. la codificación del documento, y el atacante engaña al navegador para hacerle pensar que UTF-7 es la verdadera codificación del archivo, nuestro filtrado no habrá servido de nada. Podemos especificar la codificación de caracteres con una etiqueta meta o usando la cabecera Content-Type: 1. header('Content-Type: text/html; charset=UTF-8'); Cookies Para crear cookies usamos setcookie($nombre, $valor, $expiracion, $ruta, $host, $https) 1. // Expira 3600 segundos después de haberse creado 2. setcookie('usuario', 'raul', time() + 3600); 3. setcookie('fondo', '#000000'); A las cookies se accede a través de la matriz superglobal $_COOKIE: 1. echo 'Bienvenido ', $_COOKIE['usuario']; Sesiones Para crear una sesión se llama a la función session_start(), que debe ser la primera sentencia PHP de la página. Para almacenar datos en la sesión se puede utilizar la matriz superglobal $_SESSION directamente: 1. $_SESSION['usuario'] = 'raul'; Para acceder a los datos que hemos guardado en la sesión se utiliza el mismo array asociativo: 1. echo 'Bienvenido ', $_SESSION['usuario'];