3

Aタイプ ヒントを指定したパラメータを受け入れる PHP 関数が必要callableです。NULL問題は、コールバックが提供されていないことを示すパラメーター値として、またはそのようなものを渡すことができるようにしたい場合があります。次のエラーが表示されます。

"Argument must be callable, NULL given".

これをどのように実装できるかについてのアイデアはありますか?

投稿された回答と質問に応じて...

PHP のバージョンは 5.4.14 です

コードは...

class DB
{
    protected function ExecuteReal($sqlStr, array $replacements, callable $userFunc, $allowSensitiveKeyword)
    {
        ...
        if( $userFunc != NULL && is_callable($userFunc) )
            $returnResult = $call_user_func($userFunc, $currRow);
        ...
    }

    ...
    public function DoSomething(...)
    {
        $result = $this->ExecuteReal($queryStr, Array(), NULL, TRUE);   
        ...
    }
}

上記のコード スニペットでは、データを使用してコールバックする必要がないため、呼び出し可能なオブジェクトを渡す代わりに NULL を渡すだけです。しかし、これがエラーメッセージの原因です。

解決策は以下の回答です...みんなありがとう:)

4

2 に答える 2

9

array interface型ヒントを使用する場合 ( s とesのみ型ヒントを使用classできます /php 5.6 まで/. /7.0 以降ではスカラー型も型ヒントすることができます/)、パラメーターのデフォルト値を null に設定できます。必要に応じて、パラメーターをオプションにします。

$something = 'is_numeric';
$nothing = null;

function myFunction(Callable $c = null){
      //do whatever

}

すべての作品:

 myFunction();
 myFunction($nothing);
 myFunction($something);

詳細はこちら: http://php.net/manual/en/language.oop5.typehinting.php

于 2013-04-22T18:04:51.167 に答える
-1

ヒント オブジェクトと配列のみを入力できます。関数が次のように宣言されている場合、タイプヒンティングされた変数は null になる可能性があります。

function aFn($required, MyCallable $optional=null){ /*do stuff */}

MyCallableクラス名またはキーワードArrayです。

于 2013-04-22T18:03:52.457 に答える