Variabla funktioner: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
(Skapade sidan med '== Variabla funktioner == PHP stöder konceptet med variabla funktioner. Detta innebär att om ett variabelnamn har parenteser tillagda till sig, kommer PHP att leta efter en funktion med samma namn som vad variabeln utvärderas till och försöka köra den. Bland annat kan detta användas för att implementera callbacks, funktionslistor, och så vidare. Variabla funktioner fungerar inte med språkkonstruktioner som '''echo''', '''print''', '''unset()''', '''isset()''',...')
 
 
Rad 107: Rad 107:
* [[function_exists()]]
* [[function_exists()]]
* [[variable variables]]
* [[variable variables]]
= Sidslut =
Orginalhemsidan på Engelska :
<BR>[[PHP]]
<BR>[[Språkreferens]]
<BR>[[Språkreferens#Funktioner]]
[[Kategori:Php]]

Nuvarande version från 18 augusti 2024 kl. 18.17

Variabla funktioner

PHP stöder konceptet med variabla funktioner. Detta innebär att om ett variabelnamn har parenteser tillagda till sig, kommer PHP att leta efter en funktion med samma namn som vad variabeln utvärderas till och försöka köra den. Bland annat kan detta användas för att implementera callbacks, funktionslistor, och så vidare.

Variabla funktioner fungerar inte med språkkonstruktioner som echo, print, unset(), isset(), empty(), include, require och liknande. Använd wrapper-funktioner för att kunna använda någon av dessa konstruktioner som variabla funktioner.

Exempel #1 Exempel på variabel funktion

<?php
function foo() {
    echo "In foo()<br />\n";
}

function bar($arg = '')
{
    echo "In bar(); argument was '$arg'.<br />\n";
}

// Detta är en wrapper-funktion runt echo
function echoit($string)
{
    echo $string;
}

$func = 'foo';
$func();        // Detta anropar foo()

$func = 'bar';
$func('test');  // Detta anropar bar()

$func = 'echoit';
$func('test');  // Detta anropar echoit()
?>

Objektmetoder kan också anropas med syntaxen för variabla funktioner.

Exempel #2 Exempel på variabel metod

<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // Detta anropar metoden Bar()
    }
    
    function Bar()
    {
        echo "This is Bar";
    }
}

$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // Detta anropar $foo->Variable()
?>

När statiska metoder anropas, är funktionsanropet starkare än den statiska egenskapsoperatören:

Exempel #3 Exempel på variabel metod med statiska egenskaper

<?php
class Foo
{
    static $variable = 'static property';
    static function Variable()
    {
        echo 'Method Variable called';
    }
}

echo Foo::$variable; // Detta skriver ut 'static property'. Det behöver en $variable i detta omfång.
$variable = "Variable";
Foo::$variable();  // Detta anropar $foo->Variable() genom att läsa $variable i detta omfång.
?>

Exempel #4 Komplexa anropbara

<?php
class Foo
{
    static function bar()
    {
        echo "bar\n";
    }
    function baz()
    {
        echo "baz\n";
    }
}

$func = array("Foo", "bar");
$func(); // skriver ut "bar"
$func = array(new Foo, "baz");
$func(); // skriver ut "baz"
$func = "Foo::bar";
$func(); // skriver ut "bar"
?>

Se även

Sidslut

Orginalhemsidan på Engelska :
PHP
Språkreferens
Språkreferens#Funktioner