0

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

代码(简化)

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
4

5 回答 5

3
$document->new NODE();

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

$document = new NODE();

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

作为旁注,您正在重新发明轮子。我强烈建议您查看DOMDocument类系列,它们正在执行您当前尝试实现的操作,尽管回调较少。

于 2013-05-31T22:58:47.347 回答
1
if(!$callback) $callback($temp);

应该是

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

和实例化:

$document = new NODE();
于 2013-05-31T23:00:26.867 回答
1
if(!$callback) $callback($temp);

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

于 2013-05-31T23:00:47.607 回答
0

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

前任:function create($tags, callable $callback = function())

于 2013-05-31T23:17:54.440 回答
-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');  

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

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

于 2013-05-31T23:15:45.867 回答