LoginSignup
12
13

More than 5 years have passed since last update.

PHPのリソースに対する認識、間違っていませんか…?

Last updated at Posted at 2014-01-17

解放されたリソースの扱い

検証

次のコードを試してみてください。

<?php
function resource_test($resource, $name) {
    echo 
        '[' . $name. ']',
        PHP_EOL,
        '(bool)$resource => ',
        $resource ? 'TRUE' : 'FALSE',
        PHP_EOL,
        'get_resource_type($resource) => ',
        get_resource_type($resource) ?: 'FALSE',
        PHP_EOL,
        'is_resoruce($resource) => ',
        is_resource($resource) ? 'TRUE' : 'FALSE',
        PHP_EOL,
        PHP_EOL
    ;
}

$resource = tmpfile();
resource_test($resource, 'Check Valid Resource');

fclose($resource);
resource_test($resource, 'Check Released Resource');

$resource = null;
resource_test($resource, 'Check NULL');

実行結果は以下のようになるでしょう。

[Check Valid Resource]
(bool)$resource => TRUE
get_resource_type($resource) => stream
is_resoruce($resource) => TRUE

[Check Released Resource]
(bool)$resource => TRUE
get_resource_type($resource) => Unknown
is_resoruce($resource) => FALSE

[Check NULL]
(bool)$resource => FALSE
get_resource_type($resource) => FALSE
Warning:  get_resource_type() expects parameter 1 to be resource, null given in ... on line 10
is_resoruce($resource) => FALSE

ポイント

  • リソース型の値は論理型にキャストしたとき必ずTrueになる。
  • リソースは解放されるとリソースタイプが"Unknown"に変化する。is_resource関数はリソース型であるかどうかのチェックの後、リソースタイプが"Unknown"でないかどうかのチェックも行う。
  • is_resource関数は全ての値を受け付けるが、 get_resource_type関数はリソース型の値しか受け付けない
12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13