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();

これに加えて!、偽に単項演算子 ( ) を使用すると、真になります。で使用すると、Callablefalse になります。そのため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);

$callbackisの場合false、コールバックとして呼び出すことはできません。

于 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 に答える