Användardefinierade funktioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

Användardefinierade funktioner

En funktion kan definieras med syntax som följande:

Exempel #1 Pseudokod för att demonstrera användning av funktioner

<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
    echo "Exempelfunktion.\n";
    return $retval;
}
?>

Alla giltiga PHP-kod kan förekomma inuti en funktion, inklusive andra funktioner och klassdefinitioner.

Funktionsnamn följer samma regler som andra etiketter i PHP. Ett giltigt funktionsnamn börjar med en bokstav eller understreck, följt av valfritt antal bokstäver, siffror eller understreck. Som ett reguljärt uttryck skulle det uttryckas så här: `^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$`.

Tips: Se även Userland Naming Guide.

Funktioner behöver inte definieras innan de refereras, förutom när en funktion är villkorligt definierad som visas i de två exemplen nedan.

När en funktion är definierad på ett villkorligt sätt, som i de två visade exemplen, måste dess definition behandlas innan den kan anropas.

Exempel #2 Villkorliga funktioner

<?php

$makefoo = true;

/* Vi kan inte anropa foo() härifrån 
   eftersom den inte existerar ännu,
   men vi kan anropa bar() */

bar();

if ($makefoo) {
  function foo()
  {
    echo "Jag existerar inte förrän programmet når mig.\n";
  }
}

/* Nu kan vi säkert anropa foo()
   eftersom $makefoo utvärderades till true */

if ($makefoo) foo();

function bar() 
{
  echo "Jag existerar omedelbart vid programstart.\n";
}

?>

Exempel #3 Funktioner inom funktioner

<?php
function foo() 
{
  function bar() 
  {
    echo "Jag existerar inte förrän foo() anropas.\n";
  }
}

/* Vi kan inte anropa bar() ännu
   eftersom den inte existerar. */

foo();

/* Nu kan vi anropa bar(),
   foo()'s bearbetning har
   gjort den tillgänglig. */

bar();

?>

Alla funktioner och klasser i PHP har det globala omfånget - de kan anropas utanför en funktion även om de definierades inuti och vice versa.

PHP stöder inte funktionsöverlagring, och det är inte möjligt att avdefiniera eller omdefiniera tidigare deklarerade funktioner.

Notera: Funktionsnamn är inte skiftlägeskänsliga för ASCII-tecknen A till Z, men det är vanligtvis god sed att anropa funktioner som de visas i sin deklaration.

Både variabelt antal argument och standardargument stöds i funktioner. Se även funktionsreferenserna för func_num_args(), func_get_arg() och func_get_args() för mer information.

Det är möjligt att anropa rekursiva funktioner i PHP.

Exempel #4 Rekursiva funktioner

<?php
function recursion($a)
{
    if ($a < 20) {
        echo "$a\n";
        recursion($a + 1);
    }
}
?>

Notera: Rekursiva funktions-/metodanrop med över 100-200 rekursionsnivåer kan krascha stacken och orsaka att det aktuella skriptet avslutas. Speciellt anses oändlig rekursion vara ett programmeringsfel.

Sidslut

Orginalhemsidan på Engelska : https://www.php.net/manual/en/functions.user-defined.php
PHP
Språkreferens
Språkreferens#Funktioner