Variabla funktioner
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