Sunteți pe pagina 1din 32

programacion-php.readthedocs.

io

1. Introduccin a PHP Desarrollo PHP

21-27 minutos

Programacin PHP

PHP es un lenguaje diseado para crear contenido HTML. PHP puede ser ejecutado de tres formas:
en un servidor web, a travs de la lnea de comandos, o mediante un cliente GUI.

El lenguaje puede ejecutarse en prcticamente todos los sistemas operativos actuales y en


mltiples servidores web. Este tambin soporta una amplia variedad de bases de datos y cuenta
con mltiples libreras para ejecutar procesos comunes.

Una pgina PHP generalmente consiste de una pgina HTML con comandos PHP incrustados en
ella. El servidor web procesa los comandos PHP y enva la salida al visualizador (browser). Un
ejemplo de una pgina PHP sencilla sera la siguiente:

Una pgina PHP generalmente consiste de una pgina HTML con comandos PHP incrustados en
ella. El servidor web procesa los comandos PHP y enva la salida al visualizador (browser). Un
ejemplo de una pgina PHP sencilla sera la siguiente:

<html>

<head> <title>Hello, world</title> </head>

<body>

<?php echo "Hello, world!"; ?>

</body>

</html>
El comando echo de PHP produce la salida que se inserta en la pgina HTML. Note que el cdigo
PHP se escribe dentro de los delimitadores <?php y ?>.

Las instrucciones se separan con ;, en el caso de ser la ltima instruccin no es necesario el punto
y coma.

Los comentarios en PHP pueden ser:

Como en C o C++, /*...*/ //

Otro tipo de comentario de una lnea es #, que comentar la lnea en la que aparezca pero slo
hasta el tag ?> que cierra el cdigo php.

1.1. Tipos de Datos

Los tipos de cada variable en PHP no estn tan claros como en C. El intrprete asigna el tipo de una
variable segn el uso que se est haciendo de ella. Para asignar un tipo fijo a una variable se utiliza
la funcin settype(). Los tipos son:

Enteros

Flotantes

String

arreglos

Objetos

Variables variables

El siguiente ejemplo muestra la utilizacin de los tipos de datos enteros y flotantes. Los otros tipos
de datos se describen ms adelante.
<html>

<head> <title>Ejemplo 2 </title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php

#Enteros

$a = 1234; # nmero decimal

$a = -123; # un nmero negativo

$a = 0123; # nmero octal (equivalente al 83 decimal)

$a = 0x12; /* nmero hexadecimal (equivalente al 18 decimal) */

//Flotantes o reales

$b = 1.234; $b = 1.2e3;

//Escribimos algo

print "\n La a= $a y la b= $b <br>\n";

?>

</body>

</html>

1.1.1. Hileras de texto


Las hileras de texto pueden estar delimitadas por o . Si la hilera de texto est delimitada por
comillas dobles, cualquier variable incluida dentro de ella ser sustituida por su valor (ver y
ejecutar el ejemplo anterior). Para especificar el carcter se escapar con el carcter backslash( \
).

Las operaciones con hileras de texto son exactamente igual que en PERL. Por ejemplo, con strlen
se ve el tamao de una hilera de texto y con el punto ( . ) se concatenan hileras de texto.

<html>

<head> <title>Ejemplo 3 </title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php

/* Asignando una hilera de texto. */

$str = "Esto es una hilera de texto";

/* Aadiendo a la hilera de texto. */

$str = $str . " con algo ms de texto";

/* Otra forma de aadir, incluye un carcter de nueva lnea */

$str .= " Y un carcter de nueva lnea al final.\n";

print "$str <br>\n";

/* Esta hilera de texto terminar siendo '<p>Nmero: 9</p>' */

$num = 9;

$str = "<p>Nmero: $num</p>";


print "$str <br>\n";

/* Esta ser '<p>Nmero: $num</p>' */

$num = 9;

$str = '<p>Nmero: $num</p>';

print "$str <br>\n";

/* Obtener el primer carcter de una hilera de texto como una vector*/

$str = 'Esto es una prueba.';

$first = $str[0];

print "$str 0->$first <br>\n";

/* Obtener el ltimo carcter de una hilera de texto. */

$str = 'Esto es an una prueba.';

$last = $str[strlen($str)-1];

print "$str last->$last <br>\n";

?>

</body>

</html>

Para hacer conversin de hileras de texto a otros tipos de datos hay que tener en cuenta una
hilera de texto se evala como un valor numrico, el valor resultante y el tipo se determinan como
sigue. La hilera de texto se evaluar como un doble si contiene cualquiera de los caracteres ., e,
o E. En caso contrario, se evaluar como un entero. El valor viene dado por la porcin inicial de la
hilera de texto. Si la hilera de texto comienza con datos de valor numrico, este ser el valor
usado. En caso contrario, el valor ser 0 (cero). Cuando la primera expresin es una hilera de texto,
el tipo de la variable depender de la segunda expresin.
<html>

<head> <title>Ejemplo 4</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php

$foo = 1 + "10.5"; // $foo es doble (11.5)

print "$foo <br>\n";

$foo = 1 + "-1.3e3"; // $foo es doble (-1299)

print "$foo <br>\n";

$foo = 1 + "bob-1.3e3"; // $foo es entero (1)

print "$foo <br>\n";

$foo = 1 + "bob3"; // $foo es entero (1)

print "$foo <br>\n";

$foo = 1 + "10 Cerditos"; // $foo es entero (11)

print "$foo <br>\n";

$foo = 1 + "10 Cerditos"; // $foo es entero (11)

print "$foo <br>\n";

$foo = "10.0 cerdos " + 1; // $foo es entero (11)

print "$foo <br>\n";

$foo = "10.0 cerdos " + 1.0; // $foo es doble (11)

print "$foo <br>\n";

?>
</body>

</html>

1.1.2. Arreglos

Los arreglos en PHP se pueden utilizar tanto como arreglos indexados (vectores) o como arreglos
asociativos (tablas hash). Para PHP, no existen ninguna diferencia arreglos indexados
unidimensionales y arreglos asociativos. Las funciones que se utilizan para crear arreglos son list()
o array() , o se puede asignar el valor de cada elemento del array de manera explcita. En el caso
de que no se especifique el ndice en un array, el elemento que se asigna se aade al final.

<html>

<head> <title>Ejemplo 5</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php

#forma explcita

$a[0] = "abc";

$a[1] = "def";

$b["foo"] = 13;

#Aadiendo valores al array

$a[] = "hola"; // $a[2] == "hola"

$a[] = "mundo"; // $a[3] == "mundo"


#mostramos los resultados

print "a= $a[0] , $a[1] , $a[2] , $a[3] <br>\n";

print "b[foo]=".$b["foo"]."<br>\n";

?>

</body>

</html>

Los arreglos se pueden ordenar usando las funciones asort(), arsort(), ksort(), rsort(), sort(),
uasort(), usort(), y uksort() dependiendo del tipo de ordenacin que se desee.

Se puede contar el nmero de elementos de un array usando la funcin count().

Se puede recorrer un array usando las funciones next() y prev(). Otra forma habitual de recorrer
un array es usando la funcin each().

Los arreglos multidimensionales son bastante simples, para cada dimensin array, se puede aadir
otro valor [clave] al final. Los indices de un array multidimensional pueden ser tanto numricos
como asociativos.

$a[1] = $f; # ejemplos de una sola dimensin

$a["foo"] = $f;

$a[1][0] = $f; # bidimensional

$a["foo"][2] = $f; # (se pueden mezclar ndices numricos y asociativos)


$a[3]["bar"] = $f; # (se pueden mezclar ndices numricos y asociativos)

$a["foo"][4]["bar"][0] = $f; # tetradimensional!

Los arreglos se declarar utilizando la instruccin array y se pueden rellenar tambin usando =>

# Ejemplo 1:

$a["color"] = "rojo";

$a["sabor"] = "dulce";

$a["forma"] = "redondeada";

$a["nombre"] = "manzana";

$a[3] = 4;

# Ejemplo 2:

$a = array(

"color" => "rojo",

"sabor" => "dulce",

"forma" => "redondeada",

"nombre" => "manzana",

3 => 4

);

1.1.3. Objetos

Para inicializar un objeto se utiliza el mtodo new , y para acceder a cada uno de sus mtodos se
utiliza el operador -> .
class nada {

function haz_nada () {

echo "No estoy haciendo nada.";

$miclase = new nada;

$miclase->haz_nada();

1.1.4. Conversin de Tipos de datos

Una variable en PHP, define su tipo segn el contenido y el contexto en el que se utilice, es decir,
si se asigna una hilera de texto a una variable, el tipo de esa variable ser string . Si a esa misma
variable se le asigna un nmero, el tipo cambiar a entero .

Para asegurarte de que una variable es del tipo adecuado se utiliza la funcin settype() . Para
obtener el tipo de una variable se utiliza la funcin gettype() .

Tambin es posible utilizar el mecanismo del casting tal y como se utiliza en C.

<html>

<head> <title>Ejemplo 6</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php
$foo = 10; // $foo es un entero

$bar = (double) $foo; // $bar es un doble

#Mostramos resultados

print "bar=$bar , foo=$foo <br>\n";

?>

</body>

</html>

Los tipos de casting permitidos son:

(int), (integer) - fuerza a entero (integer)

(real), (double), (float) - fuerza a doble (double)

(string) - fuerza a hilera de texto (string)

(array) - fuerza a array (array)

(object) - fuerza a objeto (object)

1.2. Variables

En PHP las variables se representan como un signo de dlar seguido por el nombre de la variable.
El nombre de la variable es sensible a minsculas y maysculas. Las variables se asignan
normalmente por valor, pero desde PHP4, tambin se asignan por referencia usando el smbolo &
<html>

<head> <title>Ejemplo 7</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php

$foo = 'Bob'; // Asigna el valor 'Bob' a $foo

$bar = &$foo; // Referencia $foo va $bar.

$bar = "Mi nombre es $bar"; // Modifica $bar...

echo $foo." <br>\n"; // $foo tambin se modifica.

echo $bar." <br>\n";

?>

</body>

</html>

Algo importante a tener en cuenta es que slo las variables con nombre pueden ser asignadas por
referencia.

1.2.1. 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 PHPinfo().

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:

GATEWAY_INTERFACE:

SERVER_NAME

SERVER_SOFTWARE

SERVER_PROTOCOL

REQUEST_METHOD

QUERY_STRING

DOCUMENT_ROOT

HTTP_ACCEPT

HTTP_ACCEPT_CHARSET

HTTP_ENCODING

HTTP_ACCEPT_LANGUAJE

HTTP_CONNECTION

HTTP_HOST

HTTP_REFERER

HTTP_USER_AGENT

REMOTE_ADDR

REMOTE_PORT

SCRIPT_FILENAME

SERVER_ADMIN

SERVER_PORT

SERVER_SIGNATURE

PATH_TANSLATED

SCRIPT_NAME
REQUEST_URL

las variables creadas por el propio PHP son:

argv

argc

PHP_SELF

HTTP_COOKIE_VARS

HTTP_GET_VARS

HTTP_POST_VARS

Nota: Esta lista no es exhaustiva ni pretende serlo. Simplemente es una gua de qu tipo de
variables predefinidas se puede esperar tener disponibles en un script PHP.

1.2.2. mbito de una variable

El mbito de una variable en PHP es exactamente igual que en C o en Perl tomando siempre en
cuenta los archivos incluidos al principio de cada programa.

La nica diferencia se encuentra en las variables globales, que tienen que ser expresamente
definidas dentro de las funciones.

<html>

<head> <title>Ejemplo 8</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php
$a = 1;

$b = 2;

Function Sum () {

global $a, $b;

$b = $a + $b;

Sum ();

echo $b;

?>

</body>

</html>

1.2.3. Variables 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 :math:`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:

La instruccin anterior provocar 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 arreglos de variables de este tipo. Por ejemplo :math:`$a[1]
provoca una ambiguedad para el intrprete, puesto que no sabe si se desea utilizar la variable
denominada a[1] o utilizar la variables :math:`a indexndola en su primer valor. Para esto se utiliza
una sintaxis especial que sera *{{$a}[1]* segn se desee una opcin u otra.

1.2.4. Variables de los formularios HTML

Cuando existe un formulario en HTML, inmediatamente despus de ser enviado, dentro del
mbito PHP se crean automticamente una variable por cada uno de los objetos que contiene el
formulario.

Por ejemplo, consideremos el siguiente formulario:

<html>

<head> <title>Ejemplo 9</title></head>

<body>

<h1> Ejemplo de Formulario 1 </h1>

<p>

Dame tu nombre !!!

<form action="ej10.php" method="post">

Nombre: <input type="text" name="nombre"> <input type="submit">


</form>

</body>

</html>

Cuando es enviado, PHP crear la variable $nombre, que contendr lo que sea que se introdujo en
el campo Nombre:: del formulario.

<html>

<head> <title>Ejemplo 10</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php

print "<h2>Hola $nombre </h2>\n";

?>

</body>

</html>

PHP tambin maneja arreglos en el contexto de variables de formularios, pero slo en una
dimensin. Se puede, por ejemplo, agrupar juntas variables relacionadas, o usar esta caracterstica
para recuperar valores de un campo select input mltiple:

<html>

<head> <title>Ejemplo 11</title></head>


<body>

<h1> Ejemplo de Formulario 2 </h1>

<form action="ej12.php" method="post">

Nombre: <input type="text" name="personal[name]"> E-mail: <input type="text"


name="personal[email]"> Cerveza: <br>

<select multiple name="beer[]">

<option value="warthog">Warthog

<option value="guinness">Guinness

<option value="stuttgarter">Stuttgarter Schwabenbru

</select>

<input type="submit">

</form>

</body>

</html>

<html>

<head> <title>Ejemplo 12</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php

print "<h2>Hola $personal[name] , ";


print "tu email es $personal[email] y ";

print "te gusta la cerveza $beer[0] </h2>\n";

?>

</body>

</html>

Si la posibilidad de PHP de track_vars est activada (se hace en la configurtacin previa a la


compilacin), las variables enviadas con los mtodos POST o GET tambin se encontrarn en los
arreglos asociativos globales :math:`HTTP_POST_VARS y `HTTP_GET_VARS.

1.3. Constantes

Las constantes en PHP tienen que ser definidas por la funcin `define()
<php_manual_es.html#function.define>`__ y adems no pueden ser redefinidas con otro valor.

Adems, existen una serie de variables predefinidas denominadas:

_FILE_: Fichero que se est procesando.

_LINE_: Lnea del fichero que se est procesando

_PHP_VERSION: Versin de PHP.

PHP_OS: Sistema operativo del cliente.

TRUE: Verdadero.

FALSE: Falso.

E_ERROR: Error sin recuperacin.

E_WARNING: Error recuperable.

E_PARSE: Error no recuperable (sintaxis).


E_NOTICE: Puede Tratarse de un error o no. Normalmente permite continuar la ejecucin.

Todas las constantes que empiezan por E_se utilizan normalmente con la funcin
error_reporting().

<html>

<head> <title>Ejemplo 14</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php

define("CONSTANTE", "hello world.");

echo CONSTANTE;

?>

</body>

</html>

1.4. Expresiones y operadores

En PHP una expresin es cualquier cosa que pueda contener un valor. Las expresiones ms simples
son las variables y las constantes y otras ms complicadas sern las funciones, puesto que cada
funcin devuelve un valor al ser invocada, es decir, contiene un valor, por lo tanto, es una
expresin.
Todas las expresiones en PHP son exactamente igual que en C. Los operadores 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 seleccin, '$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 instruccin y si ocurre otro error posterior, se machaca el valor con la
nueva hilera de texto.

PHP mantiene tambin los operadores que sirven para ejecutar un comando del sistema tal y
como hace la funcin `system() <php_manual_es.html#function.system>`__.

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 &&

Izquierda |

Izquierda ^

Izquierda &

No posee == != ===

No posee < <= > >=

Izquierda >> <<

Izquierda

Izquierda */%

Derecha ! ~ ++ (int) (double) (string) (array) (object) @

Derecha [

No posee new

<html>

<head> <title>Ejemplo 15</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php
function double($i) {

return $i*2;

$b = $a = 5; /* asignar el valor cinco a las variables $a y $b */

$c = $a++; /* postincremento, asignar el valor original de $a (5) a $c */

$e = $d = ++$b; /* preincremento, asignar el valor incrementado de $b (6) a

$d y a $e */

/* en este punto, tanto $d como $e son iguales a 6 */

$f = double($d++); /* asignar el doble del valor de $d antes

del incremento, 2*6 = 12 a $f */

$g = double(++$e); /* asignar el doble del valor de $e despus

del incremento, 2*7 = 14 a $g */

$h = $g += 10; /* primero, $g es incrementado en 10 y termina valiendo 24.

despus el valor de la asignacin (24) se asigna a $h,

y $h tambin acaba valiendo 24. */

#Operador de ejecucin

$output = `ls -al`;

echo "<pre>$output</pre><br>";

echo "<h3>Postincremento</h3>";
$a = 5;

echo "Debera ser 5: " . $a++ . "<br>\n";

echo "Debera ser 6: " . $a . "<br>\n";

echo "<h3>Preincremento</h3>";

$a = 5;

echo "Debera ser 6: " . ++$a . "<br>\n";

echo "Debera ser 6: " . $a . "<br>\n";

echo "<h3>Postdecremento</h3>";

$a = 5;

echo "Debera ser 5: " . $a-- . "<br>\n";

echo "Debera ser 4: " . $a . "<br>\n";

echo "<h3>Predecremento</h3>";

$a = 5;

echo "Debera ser 4: " . --$a . "<br>\n";

echo "Debera ser 4: " . $a . "<br>\n";

?>

</body>

</html>

1.5. Estructuras de Control


Adems de la sintaxis normal (parecida al Perl o al C), PHP ofrece una sintaxis altenativa para
alguna de sus estructuras de control; a saber, if, while, for, y switch. En cada caso, la forma bsica
de la sintaxis alternativa es cambiar abrir-llave por dos puntos (:) y cerrar-llave por endif;,
endwhile;, endfor;, or endswitch;, respectivamente.

<html>

<head> <title>Ejemplo 16</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php

$a=8;

$b=6;

// Primer if

if ($a > $b) {

print "a es mayor que b<br>";

$b = $a;

// if alternativo

if ($a > $b):

print "A es mayor que B<br>";

endif;
// Segundo if (con else y elseif )

if ($a > $b) {

print "a es mayor que b<br>";

} elseif ($a == $b) {

print "a es igual que b<br>";

} else {

print "b es mayor que a<br>";

// Segundo if alternativo

if ($a > $b):

print "A es mayor que B<br>";

print "...";

elseif ($a == $b):

print "A es igual a B<br>";

print "!!!";

else:

print "B es mayor que A<br>";

endif;

?>

</body>

</html>

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 :math:`value) - foreach(a rray as `key=>$value)

switch switch: endswitch;

continue

break

require()(Necesitan estar dentro de tags PHP)

include()(Necesitan estar dentro de tags PHP)

La instruccin require() se sustituye a s misma con el archivo especificado, tal y como funciona la
directiva #include de C. La instruccin include() incluye y evala el archivo especificado.

A diferencia de include(), require() siempre leer el archivo referenciado, incluso si la lnea en que
est no se ejecuta nunca. Si se quiere incluir condicionalmente un archivo, se usa include(). La
instruccin conditional no afecta a require(). No obstante, si la lnea en la cual aparece el require()
no se ejecuta, tampoco se ejecutar el cdigo del archivo referenciado.

De forma similar, las estructuras de ciclo no afectan la conducta de require().. Aunque el cdigo
contenido en el archivo referenciado est todava sujeto al ciclo, el propio require() slo ocurre
una vez. Esto significa que no se puede poner una instruccin require() dentro de una estructura
de ciclo y esperar que incluya el contenido de un archivo distinto en cada iteracin. Para hacer
esto, usa una instruccin include(). As, require, reemplaza su llamada por el contenido del fichero
que requiere, e include, incluye y evalua el fichero especificado.

<?php

print "Hola Mundo !<br>\n";

?>

El archivo que realiza la inclusin del primero sera algo similar a esto:

<html>

<head> <title>Ejemplo 18</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php include( 'ej17.php' ); ?>

</body>

</html>

1.6. Funciones

1.6.1. Funciones definidas por el usuario

Un ejemplo puede ser:

function foo($arg1, $arg2, ..., $argN) {

echo "Funcin ejemplo";


return $value;

Dentro de una funcin puede aparecer cualquier cosa, incluso otra funcin o definiciones de clase.

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 definicin de la funcin,
anteponiendo el smbolo & al argumento que corresponda, en este caso la llamada ser igual que
la llamada a una funcin normal, o manteniendo la definicin de la funcin normal y anteponer un
& delante del argumento que corresponda en la llamada a la funcin.

<html>

<head> <title>Ejemplo 19</title></head>

<body>

<h1> Ejemplo de PHP </h1>

<?php

//Define la funcin con parametros por referencia

function suma1 (&$a, &$b)

$c=$a+$b;

return $c;

//Define la funcin con parametros por valor

function suma2 ($a, $b)


{

$c=$a+$b;

return $c;

$a=2; $b=3; $suma;

//Llama la funcin 1 por referencia (no puede ser de otra forma)

print $suma=suma1($a,$b);

//Llama la funcin 2 por referencia

print $suma=suma1(&$a,&$b);

//Llama la funcin 2 por valor

print $suma=suma1($a,$b);

?>

</body>

</html>

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 funcin se obtendr una frase u otra segn se llame:

echo hacerCafe();

echo hacerCafe("expreso");

En el caso de tratarse de una funcin con argumentos por defecto y argumentos normales, los
argumentos por defecto debern estar agrupados al final de la lista de argumentos.

En PHP4 el nmero de argumentos de una funcin definida por el usuario, puede ser variable, se
utilizan las funciones func_num_args(), func_get_arg() y func_get_args().

1.6.2. Valores devueltos

A diferencia de C, PHP puede devolver cualquier nmero de valores, slo har falta recibir estos
argumentos de la forma adecuada. Ejemplo:

function numeros() {

return array(0,1,2);

list ($cero, $uno, $dos) = numeros();

1.6.3. Funciones variables

PHP soporta el concepto de funciones variable, esto significa que si una variable tiene unos
parntesis aadidos al final, PHP buscar una funcin con el mismo nombre que la evaluacin de
la variable, e intentar ejecutarla.
<?php

function 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');

?>