回调函数(PHP)不起作用


Callback in function (PHP) is not working

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

代码(简化(

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
$document->new NODE();

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

$document = new NODE();

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

顺便说一句,你正在重新发明轮子。我强烈建议您查看DOMDocument类家族,它们正是您当前尝试实现的,尽管回调较少。

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

如果$callbackfalse,那么您肯定不能将其作为回调调用。

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

应该是

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

以及报喜:

$document = new NODE();

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

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

要在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');  

因此,正如您所看到的,您只能将名称传递给函数,并且应该预定义该函数。。

类似的问题:如何在PHP中实现回调?