PHP 7は、リソースの厳密な型指定をサポートしていますか?サポートしている場合、どのようにですか?
例えば:
_ declare (strict_types=1);
$ch = curl_init ();
test ($ch);
function test (resource $ch)
{
}
_
上記はエラーになります:
致命的なエラー:キャッチされないTypeError:test()に渡される引数1はリソースのインスタンスでなければなりません。リソースは指定されています
_$ch
_のvar_dumpは、それがresource(4、curl)であることを明らかにし、マニュアルではcurl_init ()
がリソースを返すと述べています。
_$ch variable
_をサポートするために、厳密にtest()
関数を入力することは可能ですか?
PHPには リソースのタイプヒント がないため、
リソースのタイプヒントは追加されていません。これにより、リソースから既存の拡張機能のオブジェクトに移動できなくなります。これは、一部のユーザーが既に行っていることです(GMPなど)。
ただし、関数/メソッド本体内で is_resource()
を使用して、渡された引数を確認し、必要に応じて処理することができます。再利用可能なバージョンは、次のようなアサーションになります。
function assert_resource($resource)
{
if (false === is_resource($resource)) {
throw new InvalidArgumentException(
sprintf(
'Argument must be a valid resource type. %s given.',
gettype($resource)
)
);
}
}
あなたはそれからあなたはそのようなあなたのコード内で使うことができます:
function test($ch)
{
assert_resource($ch);
// do something with resource
}
resource
は 有効なタイプ ではないため、古き良きPHP/5タイプのヒントに従って、クラス名と見なされます。ただし、curl_init()
はオブジェクトインスタンスを返しません。
私が知る限り、リソースを指定する方法はありません。すべてのリソースが同一であるとは限らないため、おそらくそれほど役に立ちません。fopen()
によって生成されたリソースは、oci_parse()
には役に立たないでしょう。