11
$obj = new stdClass();
echo gettype($obj); //object

function abc(object $obj) {
    return;
}

abc($obj); //Catchable fatal error: Argument 1 passed to abc() must be an instance of object, instance of stdClass given

呼び出しabc($obj)がエラーをトリガーするのはなぜですか?

キャッチ可能な致命的なエラー:abc()に渡される引数1は、オブジェクトのインスタンスである必要があり、stdClassのインスタンスが指定されている必要があります

4

2 に答える 2

25

タイプヒントは、クラス名、インターフェイス名、または。に対してのみ機能するためarrayです。objectphpオブジェクトモデルには(C#のような他のプログラミング言語のように)共通の祖先はありません。指定する必要があるのはstdClass

php 7.2以降、object質問で推測したとおりにタイプヒントを使用できるようになりました。

function abc(object $obj) {
    return;
}
于 2012-11-08T10:54:38.893 に答える
4

PHPでの型ヒントに関するドキュメントを読んでください。現在のコードは、クラスのインスタンス(!という名前のクラス)abcであるパラメーターを関数に受け入れさせます。代わりにそれを行います:objectobject

function abc(stdClass $obj)
于 2012-11-08T10:57:25.813 に答える