call_user_func

(PHP 4, PHP 5)

call_user_func — Вызывает пользовательскую функцию

Описание

mixed call_user_func ( callback $function [, mixed $parameter [, mixed $... ]] )

Вызывает пользовательскую функцию function со следующими параметрами:

<?php
function barber($type
{
    echo 
"You wanted a $type haircut, no problem";
}
call_user_func('barber'"mushroom");
call_user_func('barber'"shave");
?>

Методы класса также могут быть вызваны статически при передаче array($classname, $methodname) в качестве параметра function .

<?php
class myclass {
  function 
say_hello() 
  {
    echo 
"Hello!\n";
  }
}

$classname "myclass";

call_user_func(array($classname'say_hello'));
?>

Замечание: Обратите внимание, что параметры для call_user_func() не могут передаваться по ссылке.

<?php
function increment(&$var)
{
    
$var++;
}

$a 0;
call_user_func('increment'$a);
echo 
$a// 0

call_user_func_array('increment', array(&$a)); // You can use this instead
echo $a// 1
?>

См. также: is_callable(), и call_user_func_array()

Коментарии

Автор:
You don't need to use this function to call a variable class function. Instead you can do the following:

$this->{$fnname}();

The example works in PHP 5 from within the class. It is the {} that do the trick.

Regards,
Julian.
2007-09-07 08:31:01
http://php5.kiev.ua/manual/ru/function.call-user-func.html
Автор:
A good use for call_user_func(); is for recursive functions.
If you're distributing code, you will often come across users who will rename functions and break the code..
Use this: call_user_func(__FUNCTION__, ... ); inside a function to call itself with whatever parameters you want.

<?php
// example, an extremely simplified factorial calculator..
// it's quite obvious when someone renames the function, it'll spit out an error because it wants to call itself.
function Factorial($i=1) {
  return(
$i==1?1:$i*Factorial($i-1));
}

// you can give this function whatever name you want, it'll always work, of course if you initially call it using the name you gave it.
function qwertyuiop($i=1) {
  return(
$i==1?1:$i*call_user_func(__FUNCTION__,$i-1));
}
?>

Just that I didn't see any reference to recursive functions when user_call_func(); really helps.
2009-10-04 19:08:58
http://php5.kiev.ua/manual/ru/function.call-user-func.html
if you simply want to dynamically call a method on an object it is not necessary to use call_user_function but instead you can do the following:

<?php

$method_name 
"AMethodName";

$obj = new ClassName();

$obj->{$method_name}();

?>

I've used the above so I know it works.

Regards,
-- Greg
2010-09-11 13:38:52
http://php5.kiev.ua/manual/ru/function.call-user-func.html
<?php

class MyClass{

    public function 
hello($str)

    {

        echo 
'hello ' $str;

    }

}

$obj = new MyClass();

[
$obj'hello']('World'); // the array can be called as a function
2019-12-11 14:08:35
http://php5.kiev.ua/manual/ru/function.call-user-func.html

    Поддержать сайт на родительском проекте КГБ