【问题标题】:call_user_func() expects parameter 1 to be a valid callbackcall_user_func() 期望参数 1 是一个有效的回调
【发布时间】:2017-08-04 18:35:00
【问题描述】:

我只是在 PHP 中使用 call_user_func 函数,运行此简单代码时遇到此错误:

<?php


class A
{

    public $var;
    private function printHi()
    {

        echo "Hello";   

    }

    public function __construct($string)
    {
        $this->var = $string;   


    }

    public function foo()
    {

        call_user_func($this->var); 

    }

}

$a = new A('printHi');
$a->foo();


?>

我知道如果我在名为 printHi 的类之外创建一个函数,它可以正常工作,但我指的是该类的 print hi 并且不确定为什么“this”没有被注册。

【问题讨论】:

  • call_user_func_array(array($this,'printHi'), array($arg1, $arg2));

标签: php dictionary


【解决方案1】:

$this-&gt;var 在您的示例中评估为printHi。但是,当您调用类的方法时,您需要将回调作为数组传递,其中第一个元素是对象实例,第二个元素是函数名:

call_user_func(array($this, $this->var));

这里是关于有效回调的文档:http://www.php.net/manual/en/language.types.callable.php

【讨论】:

    【解决方案2】:

    除了 Omar 的回答,您还可以将 printHi() 设为类静态函数,然后您可以从 call_user_func('A::printHi') 调用它,如下所示:

    class A
    {
    
        public $var;
        public static function printHi()
        {
    
            echo "Hello";   
    
        }
    
        public function __construct($string)
        {
            $this->var = $string;   
    
    
        }
    
        public function foo()
        {
    
            call_user_func($this->var); 
    
        }
    
    }
    
    $a = new A('A::printHi');
    $a->foo();
    

    live example

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 2013-08-01
      • 2012-10-04
      • 1970-01-01
      • 2020-11-08
      • 2016-06-06
      • 2021-04-18
      • 1970-01-01
      • 2020-01-26
      相关资源
      最近更新 更多