PHP suportă conceptul de funcții variabile. Aceasta înseamnă că, dacă un nume de variabilă are paranteze atașate, PHP va căuta o funcție cu același nume, și va încerca să o execute. Printre altele, aceasta poate fi folosită pentru a implementa apeluri inverse, tabele de funcții și așa mai departe.
Funcțiile variabile nu vor funcționa cu constructe de limbaj precum echo, print, unset(), isset(), empty(), include, require și altele asemenea. Utilizați funcțiile wrapper pentru a utiliza oricare dintre aceste construcții ca funcții variabile.
Exemplul #1 Exemplu de funcție variabilă
<?php
function
foo()
{
echo "In foo()<br />\n";
}
function bar($arg
=
'')
{
echo "In bar(); argument was '$arg'.<br
/>\n";
}
// Aceasta este o funcție
wrapper în jurul echo
function
echoit($string)
{
echo $string;
}
$func
= 'foo';
$func();
// Aceasta apelează foo()
$func
=
'bar';
$func('test');
// Aceasta apelează bar()
$func
= 'echoit';
$func('test');
// Aceasta apelează echoit()
?>
Metodele obiect pot fi apelate și cu sintaxa funcțiilor variabile.
Exemplul #2 Exemplu de metodă variabilă
<?php
class
Foo
{
function Variable()
{
$name
=
'Bar';
$this->$name();
// Aceasta apelează metoda Bar()
}
function Bar()
{
echo "This is Bar";
}
}
$foo
= new
Foo();
$funcname
=
"Variable";
$foo->$funcname();
// Aceasta apelează $foo->Variable()
?>
Când apelați metode statice, apelul funcției este mai puternic decât operatorul de proprietate statică:
Exemplul #3 Exemplu de metodă variabilă cu proprietăți statice
<?php
class
Foo
{
static $variable
=
'static property';
static function Variable()
{
echo 'Method Variable called';
}
}
echo Foo::$variable;
// Aceasta afișează 'static
property'. Are nevoie de o $variable în acest scop.
$variable
=
"Variable";
Foo::$variable();
// Aceasta apelează $foo->Variable()
citind $variable în acest scop.
?>
Exemplul #4 Apelabile complexe
<?php
class
Foo
{
static function bar()
{
echo "bar\n";
}
function baz()
{
echo "baz\n";
}
}
$func
= array("Foo",
"bar");
$func();
// afișează "bar"
$func
= array(new
Foo,
"baz");
$func();
// afișează "baz"
$func
= "Foo::bar";
$func();
// afișează "bar"
?>
Sursa: PHP Manual, licența CC BY 3.0. Traducere și adaptare: Nicolae Sfetcu
Lasă un răspuns