当我执行以下代码时,我会收到这个错误。为什么?回调的正确用途是什么?
代码(简化(
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);
如果$callback
是false
,那么您肯定不能将其作为回调调用。
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中实现回调?