2016-07-18 14 views
12

PHP 7はリソースの厳密な型指定をサポートしていますか?もしそうなら、どうですか?PHP 7と厳密な "resource"タイプ

declare (strict_types=1); 

    $ch = curl_init(); 
    test ($ch); 

    function test (resource $ch) 
    { 

    } 

上記のエラーを与える:例えば

Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of resource, resource given

$ch上のvar_dumpはリソース(4、カール)であることを明らかにし、マニュアルがcurl_init()言いますリソースを返します。

の機能を完全に入力して$ch variableをサポートすることは可能ですか?

答えて

19

PHPはありません。あなたがそのようなあなたのコード内で使用することができ

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 
} 
6

resourcevalid typeではないので、古いPHP/5タイプのヒントのようにクラス名とみなされます。しかし、curl_init()はオブジェクトインスタンスを返しません。

私が知る限り、リソースを指定する方法はありません。 fopen()によって生成されたリソースは、oci_parse()では役に立たないため、すべてのリソースが同一であるとは限りません。

No type hint for resources is added, as this would prevent moving from resources to objects for existing extensions, which some have already done (e.g. GMP).

は、しかし、あなたが渡された引数を確認し、必要に応じてそれを処理する関数/メソッド本体内is_resource()を使用することができますtype hint for resourcesので