[Ir al menú de PHP]
Manejando funciones

Manejando funciones

Las funciones PHP definidas por el usuario tienen la siguiente sintaxis:

function nombre(){
.....
...instrucciones...
... funciones PHP...
}
Es imprescindible respetar estrictamente la sintaxis: function, () y escribir dentro de las llaves el código correspondiente a esa función.

Las funciones PHP no se ejecutan en tanto y cuanto no sean invocadas.
Fíjate en el primero de los ejemplos. Nos devuelve una página en blanco porque pese a estar definida la función no es invocada.

Para invocar una función la sintaxis es esta:

nombre()
Al ser llamada con esta sintaxis, se ejecutan las intrucciones contenidas en la función.

Aunque el versiones anteriores de PHP era necesario definir la función antes de invocarla, a partir de la versión 4 no es necesaria esa organización secuencial.

La función y la llamada pueden estar escritas en cualquier parte del documento. En el tercero de los ejemplos, la llamada a la función está escrita antes de definir la función.

Utilizando valores externos

Si se invoca una variable -definida previamente- desde una función tomará valor NULO.
Recuerda que cuando estudiamos las variables PHP veíamos que se excluian las funciones del ámbito de las variables, salvo que, se asignara a las mismas ambito global dentro de la propia función.

En la function a1() del ejemplo, puedes comprobar este extremo y en la function a2() puedes comprobar como asignado ámbito global SI toma los valores de esa variable.

Una de las formas de asignar valores a las variables internas es definir variables y valores dentro del paréntesis que va detrás de function nombre, así por ejemplo:

function p1($a=2,$b=5)

Esos valores - 2 y 5 - serían utilizado por la función independientemente de que las variables $a y/o $b pudieran contener otros distintos en el ámbito externo de la función.

Otra forma de asignación de valores a las variables internas de una función es pasar los parámetros por valor. Para hacerlo la sintaxis es la siguiente:

En la definición de la función deben incluirse tantas variables como valores distintos pretendan pasarse. Por ejemplo:

function p1($a,$b)

prepararía la función para recibir dos valores pero requeriría que además, en la llamada a la función se escribieran esos dos valores separados por comas. Por ejemplo:
p1(47,-32)

Una variante del ejemplo anterior, sería sustituir -en la llamada a la función- las constantes por variables predefinidas tal como puede verse en la función a5 de los ejemplos.

Pasando parámetros por referencia

Tal como estamos viendo, por defecto las funciones PHP pueden recibir valores de variables externas y utilizar esos valores sin que el valor original de la variable sufra modificación.

Una manera de forzar que la función modifique los valores externos de la variable es lo que se llama en argot «pasar por referencia»

La manera de hacerlo es esta:
Hay que anteponer al nombre de la variable el símbolo & y PHP intepretará que la estamos pasando por referencia.

El & puede anteponerse tanto en la definición de la función -fíjate en la función a2 del ejemplo 61 - como en la llamada a la función, tal como puedes ver en el caso de a3 en el ejemplo anterior.

La segunda de las opciones nos concede mayor libertad ya que nos permite usar una sola función y decidir en las llamadas la forma de pasar los parámetros, con lo cual una misma función puede ser llamada tanto por valores como por referencia.

¡¡Cuidado...!!

Si tratas de ejecutar una función en la que colocas el & en la llamada a la función y lo haces en tu servidor local con la configuración del PHP que yo te he contado, te aparecerá un mensaje como este:


Warning: Call-time pass-by-reference has been deprecated -argument passed by value; If you would like to pass it by reference, modify the declaration of a3(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file.

La solución la tienes aquí a la derecha... ?Serás capaz de decir que no me preocupo por tí...? :-)


 
 


Ejemplos de funciones


<?
function a1(){

   for($i=1;$i<=10;$i++){
            echo $i,"<br>";
            }
}
?>



ejemplo57.php

<?
function a1(){

   for($i=1;$i<=10;$i++){
            echo $i,"<br>";
            }
}

a1();
?>


ejemplo58.php

<?
a1();

function a1(){

   for($i=1;$i<=10;$i++){
            echo $i,"<br>";
            }
}


?>


ejemplo59.php

<? $a=5; $b=47;

function a1(){
echo "Resultado de 2*\$a en la función a1: ", 2*$a,"<br>";
echo "el valor de \$a dentro de la función es: ",$a,"
"; } a1(); echo "El valor de \$a despues de ejecutar la función es: ",$a,"<br><br>"; function a2(){ global $a; echo "Resultado de 2*\$a en la función a2: ", 2*$a,"<br>"; echo "el valor de \$a dentro de la función es: ",$a,"
"; } a2(); echo "El valor de \$a despues de ejecutar la función es: ",$a,"<br><br>"; function a3($a=56){ echo "Resultado de 2*\$a en la función a3: ", 2*$a,"<br>"; echo "el valor de \$a dentro de la función a3 es: ",$a,"<br>"; } a3() echo "El valor de \$a despues de ejecutar la función es: ",$a,<br><br>"; function a4($a,$b){ echo "Resultado de 2*\$a+3*\$b en la función a4: ", 2*$a+3*$b,"<br>"; echo "el valor de \$a dentro de la función a4 es: ",$a,"<br>"; } a4(7,-2); echo "El valor de \$a despues de ejecutar la función es: ",$a,"<br><br>"; function a5($a,$b){ echo "Resultado de 2*\$a+3*\$b en la función a5: ", 2*$a+3*$b,"
"; echo "el valor de \$a dentro de la función a5 es: ",$a,"
"; } a5($a,$b); echo "El valor de \$a despues de ejecutar la función es: ",$a,"

"; ?>


ejemplo60.php

<? $a=3; $b=2;
function a1($a,$b){
$b=pow($b,2);
$a=pow($a,$b);
echo "El nuevo valor de a dentro de la función es: ",$a, "<br>";
echo "El nuevo valor de b dentro de la función es: ",$b, "<br><br>";
}

a1($a,$b);

echo "Al salir de la función a vale: ",$a, "<br>";
echo "Al salir de la función b vale: ",$b, "<br>";

function a2(&$a,$b){
$b=pow($b,2);
$a=pow($a,$b);
echo "El nuevo valor de a dentro de la función es: ",$a, "<br>";
echo "El nuevo valor de b dentro de la función es: ",$b, "<br><br>";
}

a2($a,$b);

echo "Al salir de la función a vale: ",$a, "<br>";
echo "Al salir de la función b vale: ",$b, "<br>";

function a3($a,$b){
$b=pow($b,2);
$a=pow($a,1/$b);
echo "El nuevo valor de a dentro de la función es: ",$a, "<br>";
echo "El nuevo valor de b dentro de la función es: ",$b, "<br><br>";
}

a3($a,&$b);

echo "Al salir de la función a vale: ",$a, "
"; echo "Al salir de la función b vale: ",$b, "
"; ?>


ejemplo61.php


Midificando el fichero php.ini

Para resolver el problema que te menciono al margen basta con abrir el fichero php.ini que teníamos en c:\windows y desde el propio block de notas y utilizando la opción buscar localizar el sitio donde dice:
allow_call_time_pass_reference = Off ; whether to enable the ability to force arguments to be

y sustituir el Off por un On, guardar el fichero después del cambio... y asunto concluido...


Sugerir a un/a amig@ Envíame tus comentarios
Anterior
Indice
Siguiente