当我执行以下代码时,我收到此错误。这是为什么?回调的正确用法是什么?
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
答案 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);
如果$callback
为false
,您肯定无法将其称为回叫。
答案 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');
正如您所见,您只能将名称传递给函数,您应该预定义函数..