函数回调(PHP)不起作用

时间:2013-05-31 22:54:26

标签: php oop

当我执行以下代码时,我收到此错误。这是为什么?回调的正确用法是什么?

CODE(简化)

class NODE {
  //...some other stuff
  function create($tags, $callback=false) {
    $temp = new NODE();
    //...code and stuff
    if($callback) $callback($temp); //fixed (from !$callback)
    return $this;
  }
}
$document = new NODE();
$document->create("<p>", function($parent) {
$parent->create("<i>");
});

错误

Fatal error: Function name must be a string in P:\htdocs\projects\nif\nif.php on line 36

5 个答案:

答案 0 :(得分:3)

$document->new NODE();

这不是有效的语法。接受的格式为:

$document = new NODE();

除此之外,如果你对一个false使用一元运算符(!),你就会得到。如果您在Callable上使用它,则会出错。因此,if (!$callback) $callback()将抛出脚本的第一个错误。

作为旁注,你正在重新发明轮子。我强烈建议你看看DOMDocument系列的类,它们正在完成你目前正在尝试实现的类,尽管回调较少。

答案 1 :(得分:1)

if(!$callback) $callback($temp);

应该是

if($callback) $callback($temp);

和实例:

$document = new NODE();

答案 2 :(得分:1)

if(!$callback) $callback($temp);

如果$callbackfalse,您肯定无法将其称为回叫。

答案 3 :(得分:0)

我的2c在这里,类型提示也可以在这里使用。

例如:function create($tags, callable $callback = function())

答案 4 :(得分:-1)

要在php中执行此类操作,您应该使用函数指针并告诉php执行哪个函数。 看看这段代码。

// This function uses a callback function.
function doIt($callback)
{
    $data = acquireData();
    $callback($data);
}


// This is a sample callback function for doIt().
function myCallback($data)
{
    echo 'Data is: ', $data, "\n";
}


// Call doIt() and pass our sample callback function's name.
doIt('myCallback');  

正如您所见,您只能将名称传递给函数,您应该预定义函数..

类似的问题:How do I implement a callback in PHP?