martes, 8 de mayo de 2012

FUNCIONES DEFINIDAS POR USUARIOS


Una función puede ser definida usando una sintaxis como la siguiente:
Ejemplo #1 Pseudo código para demostrar el uso de funciones
<?phpfunction foo($arg_1$arg_2/* ..., */ $arg_n)
{
    echo 
"Función de ejemplo.\n";
    return 
$valordevuelto;
}
?>

Cualquier código PHP válido puede aparecer dentro de una función, incluso otras funciones y definiciones de clases.
Los nombres de las funciones siguen las mismas reglas que otras etiquetas de PHP. Un nombre de función válido comienza con una letra o guión bajo, seguido de cualquier número de letras, números, o guiones bajos. Como expresión regular se expresaría así: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.
Sugerencia
Las funciones no necesitan ser definidas antes de que se referencien, excepto cuando una función está condicionalmente definida como se muestra en los dos ejemplos de abajo.
Cuando una función está definida de una forma condicional como en los dos ejemplos mostrados, sus definiciones deben ser procesadas antes de ser llamadas.
Ejemplo #2 Funciones condicionales
<?php

$haceralgo 
true;
/* No podemos llamar a foo() desde aquí
   ya que no existe aún,
   pero podemos llamar a bar() */
bar();

if (
$haceralgo) {
  function 
foo()
  {
    echo 
"No existo hasta que la ejecución del programa llegue hasta mí.\n";
  }
}
/* Ahora podemos llamar de forma segura a foo()
   ya que $haceralgo se evaluó como verdadero */
if ($haceralgofoo();

function 
bar()
{
  echo 
"Existo desde el momento inmediato que comenzó el programa.\n";
}
?>

Ejemplo #3 Funciones dentro de funciones
<?phpfunction foo()
{
  function 
bar()
  {
    echo 
"No existo hasta que se llame a foo().\n";
  }
}
/* No podemos llamar aún a bar()
   ya que no existe. */
foo();
/* Ahora podemos llamar a bar(),
   el procesamiento de foo()
   la ha hecho accesible. */
bar();
?>

Todas las funciones y las clases de PHP tienen ámbito global - pueden ser llamadas fuera de una función incluso si fueron definidas dentro, y viceversa.
PHP no soporta la sobrecarga de funciones, ni es posible 'desdefinir' ni redefinir funciones previamente declaradas.
NotaLos nombres de las fuciones son insensibles a mayúsculas-minúsculas, por lo que es una buena idea llamar a las funciones tal y como aparecen en sus declaraciones.
El número variable de argumentos y los argumentos predeterminados están soportados por las funciones. Vea también las referencias de funciones parafunc_num_args()func_get_arg(), y func_get_args() para más información.
En PHP es posible llamar a funciones recursivas. Sin embargo, evite las llamadas a funciones/métodos recursivos con más de 100-200 niveles de recursividad ya que pueden agotar la pila y causar la terminación del script actual.
Ejemplo #4 Funciones recursivas
<?phpfunction recursividad($a)
{
    if (
$a 20) {
        echo 
"$a\n";
        
recursividad($a 1);
    }
}
?>


reject note add a note add a noteUser Contributed Notes Funciones definidas por el usuario
Caleb1994 01-Apr-2012 11:11
There isn't anything wrong with that. B() is in the global scope, and is therefore accessible at any point in the script. You may have been thinking of something like example #2, but in that example, foo() was encased within another block, which means it wasn't parsed until it's condition was checked and met.

I guess you could think of it as a recursive parser (Although I cannot claim to have any idea of how PHP's parser was coded on the backend). The top-level code (not in any brackets, functions, or other types of blocks) is parsed first. All coorasponding functions are defined, and stored. Next, the script begins to execute. When a conditional, block, or function is met, the block is scanned and any new functions, which need defining, are defined at that time.

I know that statement was two years old, but I figured I'd post some sort of explanation in order to clear up any other misguided new users. I hate finding a post with the exact same question, and no answer on the internet.

XKCD, Wisdom of the Ancients: http://xkcd.com/979/
gestioni at gerry dot it 12-Nov-2010 10:43
<?php
function A(){
    echo(
"Hello, I'm A\n");

}
echo(
"I just defined A\n");
return;

function 
B(){
    echo(
"Hello, I'm B\n");

}
echo(
"I just defined B\n");?>
If you include this file, the second echo() is not excuted but B() is still defined

No hay comentarios:

Publicar un comentario