Regresar | Temario Ing. Angel Castro (UNAM - DGSCA Centro Coapa)

1. Introducción al Lenguaje PHP

¿Qué es PHP?

PHP, acrónimo de "PHP: Hypertext Preprocessor", es un lenguaje interpretado de alto nivel embebido en páginas HTML. La mayoría de su sintaxis es similar a C, Java y Perl, con solamente un par de caracteristicas PHP específicas. La meta de este lenguaje es permitir escribir a los creadores de páginas web, páginas dinámicas de una manera rápida y fácil.

Para ilustrar esto podemos ver un simple ejemplo:

<html>
<head>
<title>Example</title>
</head>
<body>
<?php echo "Hola mundo, Esto es un Script PHP";?>
</body>
</html>

Esto es muy parecido a cualquier otro Script escrito en Perl o C. El código de PHP está incluido en tags especiales "<?,?>".

Lo que hace diferente a PHP es que el código que se deba ejecutar se ejecuta siempre en el servidor.

Así, al ejecutar el script anterior, el cliente recibirá sólo los resultados de la ejecución por lo que es imposible para el cliente acceder al código que generó la página.

¿Qué se puede hacer con PHP?

En el nivel más básico PHP es equiparable a un CGI cualquiera. La mayor ventaja de PHP es que está preparado para soportar accesos a muchos tipos de bases de datos como:

Además de esto, PHP soporta la utilización de otros protocolos como IMAP, SNMP, NNTP, POP3 o HTTP a nivel de socket.

Algo de Historia

PHP fue concebido en otono de 1994 por Rasmus Lerdorf. Las primeras versiones no distribuidas al público fueron usadas en un sus páginas web para mantener un control sobre quien consultaba su currículum. La primera versión disponible para el público a principios de 1995 fue conocida como "Herramientas para paginas web personales" (Personal Home Page Tools). Consistian en un analizador sintáctico muy simple que solo entendia unas cuantas macros y una serie de utilidades comunes en las páginas web de entonces, un libro de visitas, un contador y otras pequenas cosas. El analizador sintactico fue reescrito a mediados de 1995 y fue nombrado PHP/FI version 2. FI viene de otro programa que Rasmus habia escrito y que procesaba los datos de formularios. Asi que combinó las "Herramientas para paginas web personales", el "intérprete de formularios", anadio soporte para mSQL y PHP/FI vio la luz. PHP/FI crecio a gran velocidad y la gente empezó a contribuir en el código.

Es difícil dar estadísticas exactas, pero se estima que a finales de 1996 PHP/FI se estaba usando al menos en 15.000 páginas web alrededor del mundo. A mediados de 1997 este número habia crecido a mas de 50.000. A mediados de 1997 el desarrollo del proyecto sufrio un profundo cambio, dejó de ser un proyecto personal de Rasmus, al cual habian ayudado un grupo de usuarios y se convirtio en un proyecto de grupo mucho más organizado. El analizador sintáctico se reescribio desde el principio por Zeev Suraski y Andi Gutmans y este nuevo analizador establecio las bases para PHP versión 3. Gran cantidad de codigo de PHP/FI fue portado a PHP3 y otra gran cantidad fue escrito complétamente de nuevo.

Hoy en día (finales 1999), tanto PHP/FI como PHP3 se distribuyen en un gran número de productos comerciales tales como el servidor web "C2's StrongHold" y Redhat Linux. Una estimación conservativa basada en estadísticas de NetCraft (ver también Estudio de NetCraft sobre servidores web), es que más de 1.000.000 de servidores alrededor del mundo usan PHP. Para hacernos una idea, este número es mayor que el número de servidores que utilizan el "Netscape's Enterprise server" en Internet.

A la vez que todo esto está pasando, el trabajo de desarrollo de la próxima generación de PHP está en marcha. Esta versión utiliza el potente motor de scripts Zend para proporcionar altas prestaciones, así como soporta otros servidores web, además de apache, que corren PHP como módulo nativo.

Arriba

1.1 Sintaxis Basica

Saliendo de HTML

Hay cuatro formas de salir de HTML y entrar en el "modo de código PHP":

Formas de salir de HTML

1. <? echo ("esta es la más simple, una instrucción de procesado SGML\n"); ?>

2. <?php echo("si quiere servir documentos XML, haga esto\n"); ?>

3. <script language="php">
echo ("a algunos editores (como FrontPage) no les gustan las intrucciones de procesado");
</script>

4. <% echo ("Puedes también usar etiquetas tipo ASP"); %>
<%= $variable; # Esto es una forma abreviada de "<%echo .." %>

Separación de instrucciones

Las instrucciones se separan igual que en C o perl - terminando cada sentencia con un punto y coma.

La etiqueta de cierre (?>) también implica el fin de la sentencia, así lo siguiente es equivalente:


<?php
echo "Esto es una prueba";
?>

<?php echo "Esto es una prueba" ?>

Arriba



1.2 Variables

Conceptos básicos

Los conceptos a tener en cuenta en PHP con las variables son los siguientes:

Variables predefinidas

En PHP cada vez que se ejecuta un script, existen variables que se crean y que nos pueden informar del entorno en el que se está ejecutando dicho script.

Para obtener una lista de todas estas variables predefinidas se puede utilizar la funcion phinfo().

De todas estas variables, algunas se crean dependiendo del servidor que se esté utilizando y otras son propias de PHP.

Si se tratara de un servidor Apache, la lista de variables es:

las variables creadas por el propio PHP son:

Varibles variables

PHP permite un mecanismo para mantener variables con un nombre no fijo.

Por ejemplo:

   $a = "hola";
   $$a = "mundo";

El ejemplo anterior, define dos variables, una denominada $a que contiene el valor "hola" y otra que se llama $hola que contiene el valor "mundo"

Para acceder al valor de una variable, se accede con:

  echo "$a ${$a}";

ó

  echo "$a ${$a}";

Ambas sentencias provocaran la salida "hola mundo".

Algo que se debe tener en cuenta cuando se utilizan variables, es que hay que resolver la ambiguedad que se crea al utilizar arrays de variables de este tipo. Por ejemplo $$a[1] provoca una ambiguedad para el intérprete, puesto que no sabe si se desea utilizar la variable denominada $a[1] o utilizar la variables $a indexandola en su primer valor. Para esto se utiliza una sintaxis especial que sería ${$a[1]} o ${$a}[1] según se desee una opción u otra.

Variables extenas a PHP

Variables de los forms HTML

Cuando existe un form en HTML, inmediatamente después de ser enviado, dentro del ámbito PHP se crean automáticamente una variable por cada uno de los objetos que contiene el form.

Si se activa la directiva <?php_track_vars?> o con la variable track_vars todo lo enviado por los métodos POST y GET estará en las variables $HTTP_POST_VARS y $HTTP_GET_VARS.

Variables de entorno

Las variables de entorno, tales como $HOME, para entornos Linux, se pueden utilizar desde PHP.

 

Arriba

1.3 Tipos de Datos


Los tipos de cada variable en PHP no están tan claros como en C. El intérprete asigna el tipo de una variable según el uso que se esté haciendo de ella. Para asignar un tipo fijo a una variable se utiliza la función settype(). Los tipos son:

Respecto al tipo entero y flotante, no hay mucho que decir, así que detallaremos sólo los tipos String, Arrays, Objetos y Juggling.

Ejemplo:

$a[]="hola"

La instrucción anterior añade el string hola al final del array 'a'. Los arrays pueden ser ordenados utilizando las siguientes funciones: asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort() y uksort() .

Otras funciones para el manejo de arrays son: count(), next(), prev() y each() .

El Constructor array()

Una forma de crear un array es utilizando el constructor array() que crea una simple estructura de acuedo a los elementos que tenga.

$canasta_de_frutas=array('manzana','naranja','platano','pera');

la pasada instruccion es lo mismo que lo siguiente:

$canasta_de_frutas[0]='manzana';
$canasta_de_frutas[1]='naranja';
$canasta_de_frutas[2]='platano';
$canasta_de_frutas[3]='pera';

Array Asociativos.

La unica diferencia es que los indices no son numeros si no que es generalmente una palabra alfanumerica llamada llave.

$canasta_de_frutas=array('rojo' => 'manzana', 'naranja' => 'naranja',
'amarillo' => 'platano', 'verde' => 'pera');

Arrays Asociativos Muldimensionales

En PHP, los arrays multidimensionales combinan las propiedades de un array unidimensional explicados anteriormente. Los indices de un array multidimensional pueden ser tanto numéricos como asociativos.

(Nota: hay que tener cuidado con la sintaxis de los arrays multidimensionales asociativos incluidos dentro de una cadena).

Ejemplo de array multidimensional asociativo:


$a=array(
"manzana" => array("color" => "rojo", "tacto" => "suave"),
"naranja" => array("color" => "naranja", "tacto" => "rugoso"),
"platano" => array("color" => "amarillo", "tacto" => "suave")
);

Arriba

 

1.4 Expresiones y operadores

En PHP una expresión es cualquier cosa que pueda contener un valor. Las expresiones más simples son las variables y las constantes y otras más complicadas serán las funciones, puesto que cada función devuelve un valor al ser invocada, es decir, contiene un valor, por lo tanto, es una expresión.

Todas las expresiones en PHP son exactamente igual que en C. Los operadors abreviados, los incrementos, etc, son exactamente iguales. Incluso existen otros operadores adicionales como el operador "." que concatena valores de variables, o el operador "===" denominado operador de identidad que devolverá verdadero si las expresiones a ambos lados del operador contienen el mismo valor y a la vez son del mismo tipo. Por último, el operador "@" sirve para el control de errores. Para poder ver como funciona el operador @, veamos un ejemplo:

  <?php
  $res = @mysql_query("select nombre from clientes")
or die   ("Error en la selección, '$php_errormsg'");
  ?>

Este ejemplo, utiliza el operador @ en la llamada a mysql_query y en el caso de dar un error, se salvará el mensaje devuelto en una variable denominada php_errormsg. Esta variable contendra el mensaje de error de cada sentencia y si ocurre otro error posterior, se machaca el valor con la nueva cadena.

PHP mantiene también los operadores "'" que sirven para ejecutar un comando del sistema tal y como hace la función system() por ejemplo.

Las diferencias con C son los operadores de referencia, & y *, puesto que las operaciones por referencias no existen en PHP·, aunque si son posibles en PHP4, y que en PHP existen dos operadores and y dos operadores or que son: 'and', '&&' y 'or', '||' respectivamente, que se diferencian en la precedencia de cada uno.

La tabla que nos puede resumir la precedencia de cada uno de los operadores es:

Asocitividad Operadores
Izquierda ,
Izquierda or
Izquierda xor
Izquierda and
Derecha print
Izquierda = += -* *= /= .= %= &= |= ^= ~= <<= >>=
Izquierda ?:
Izquierda ||
Izquierda &&
No posee == != ===
No posee < <= > >=
Izquierda >> <<
Izquierda + - .
Izquierda * / %
Derecha ! ~ ++ -- (int) (double) (string) (array) (0bject) @
Derecha [
No posee new

 

Arriba

1.6 Bloques y Sentencias

Los Bloques son pedazos de codigo dentro del programa que se van a ejecutar uno tras otro dentro del programa con un objetivo, la forma de marcarlos es exactamente igual que en el lenguaje C, se utilizan las llaves, una llave que abre '{' indica que comienza el bloque, y una llave que cierra '}' indica que termina el bloque.

Las sentencias son instrucciones de una sola linea que tiene que interpretar PHP dentro del programa con un objetivo, ya sea funcion definida por el usuario, funcion de php, u alguna referencia a alguna objeto.

Arriba

 

1.7 Funciones

Funciones definidas por el usuario

Las funciones son una secuencia de instrucciones que cumplen con un objetivo en comun, se utiliza mucho cuando se quiere hacer lo mismo varias veces y solo cambian algunos detalles, entonces se utiliza una funcion para optimizar el codigo y hacerlo mas legible para otros programadores.

Un ejemplo puede ser:

  function foo($arg1, $arg2, ..., $argN)
    {
      echo "Función ejemplo"
      return $value;
    }


Dentro de una función puede aparecer cualquier cosa, incluso otra función o definiciones de clase.

En PHP3 es necesario que una función esté declarada antes de ser referenciada, y en PHP4 esto no es necesario.

No es posible realizar sobrecarga de funciones o número variable de argumentos en PHP3 pero sí en PHP4, aunque esto se puede simular en PHP3 pasando un array de argumentos.

Respecto al paso de argumentos, son siempre pasados por valor y para pasarlos por referencia hay que indicarlo y se puede hacer de dos formas diferentes, en la definición de la función, anteponiendo el símbolo & al argumento que corresponda, en este caso la llamada será igual que la llamada a una función normal, o manteniendo la definición de la función normal y anteponer un & delante del argumento que corresponda en la llamada a la función.

PHP permite el mecanismo de argumentos por defecto. Un ejemplo de esta caracteristica es:

  function hacerCafe($tipo="capuchino")
    {
      return "he hecho un café $tipo\n";
    }

En la llamada a esta función se obtendrá una frase u otra según se llame:

  echo hacerCafe();

o

  echo hacerCafe("expreso");

En el caso de tratarse de una función con argumentos por defecto y argumentos normales, los argumentos por defecto deberán estar agrupados al final de la lista de argumentos.

En PHP4 el número de argumentos de una función definida por el usuario, puede ser variable, se utilizan las funciones func_num_args(), func_get_arg() y func_et_args().

  Valores devueltos

A diferencia de C, PHP puede devolver cualquier número de valores, sólo hará falta recibir estos argumentos de la forma adecuada. Ejemplo:

  function numeros()
    {
      return array(0,1,2);
    }
  list ($cero, $uno, $dos) = numeros();

 

Funciones Variables

Las funciones variables pueden ser una gran y potente herramienta en el procesamiento dínamico de un script. Ejemplo:

  <?php
  funcion foo()
    {
      echo "En foo()<br>\n"
    }
  function bar ($arg ='')
    {
      echo " bar();El argumento ha sido '$arg'.<br>\n"
    }
  $func = 'foo';
  $func();
  $func='bar';
  $func('test');
  ?>

 

Arriba

1.8 Constantes

Las constantes en PHP tienen que ser definidas por la función define() y además no pueden ser redefinidas con otro valor.

Además, existen una serie de variables predefinidas denominadas:

Todas las constantes que empiezan por "E_"se utilizan normalmente con la función error_reporting().

  <?php
  define("CONSTANTE", "hello world.");
  echo CONSTANTE;
  ?>

 

Arriba

1.9 Comentarios

PHP soporta comentarios tipo 'C', 'C++' y shell de Unix. Por ejemplo:

<?php
echo "Esto es una prueba"; // Esto es un comentario tipo c++ para una línea
/* Esto es un comentario multilínea
otra línea más de comentario*/
echo "Esto es aún otra prueba";
echo "Una Prueba Final"; # Este es un comentario tipo shell
?>

El tipo de comentario de "una línea" sólo comenta, en realidad, hasta el fin de la línea o el bloque actual de código PHP, lo que venga primero.

<h1>Esto es un <?# echo "simple";?> ejemplo.</h1>

La cabecera de arriba dirá 'Esto es un ejemplo'.
Se debería tener cuidado para no anidar comentarios de tipo 'C', lo cual puede ocurrir cuando se comentan grandes bloques.

<?php
/*
echo "Esto es una prueba"; /* Este comentario causará un problema */
*/
?>

 

Arriba

1.10 Estructuras de Control

La mejor forma de resumir cada una de las opciones que ofrece PHP para las estructuras de control es mediante una tabla:

Estructura Alternativa
If, if else, if elseif if: endif;
while while: endwhile;
for for: endfor;
do.. while -
foreach(array as $value)
foreach(array as $key=>$value)
(PHP4 y no PHP3)
-
switch switch: endswitch;
continue -
break -
require()(Necesitan estar dentro de tags PHP) -
include()(Necesitan estar dentro de tags PHP) -

Una nota sobre require() y include(), Si se desea incluir un fichero de forma condicional, es mejor utilizar include(), sin embargo, si la línea donde está una instrucción require() no se ejecuta, no se ejecutará nada de ese fichero. Además, si en un bucle se ejecutan varias veces una instrucción require(), el intérprete lo incluirá una sóla vez, sin embargo si es include(), se incluirá el fichero cada vez que se ejecute la instrucción. Como apunte final, debes saber que en un fichero que va a ser requerido, se puede incluir una instrucción return al final como si esta instrucción devolviera un valor (sólo en PHP3), si se trata de include, se puede poner al final del fichero una instrucción return tanto en PHP3 como en PHP4, aunque con algunas diferencias.

Así, require, reemplaza su llamada por el contenido del fichero que requiere, e include, incluye y evalua el fichero especificado.

 

Arriba