Are php resources passed by reference?

ぐ巨炮叔叔 提交于 2019-12-05 00:38:49

A resource is not the actual connection. A resource is nothing more than a pointer to a connection. So when you close the connection belonging to this resource, it does not matter if it was original or a copied one.

No they are not passed by reference by default, they are handled as any other PHP variable in this case. Check this example:

function test($fd) {
    $fd = NULL;
}

$fd = fopen('/tmp/test', 'w+');
test($fd);
var_dump(is_resource($fd)); // bool(true);

... but it's by the nature of resources they point to a single outer resource. This can be a file, a database connection or something like this. So any operations on a resource (or a copy of it) would have direct effect on that single outer resource.

Check this example:

function close($fd) {
    fclose($fd);
}

$fd = fopen('/tmp/test', 'w+');
close($fd);
var_dump(is_resource($fd)); // bool(false);

In the above example, the PHP engine resets the all references to $fd in all scopes after the files has been closed. This means from the sight of this side effect they may not being exactly the same as other variables.

A resource is neither an object nor a variable. It is just a resource. Basically what this means is that you do not really interact with resources the way you could do with, say an object. The PHP documentation itself says:

"As resource variables hold special handlers to opened files, database connections, image canvas areas and the like, converting to a resource makes no sense."

Basically unless say you are working on the core Zend Engine or creating extensions for PHP like PECL, you would really worry much about resource. From a PHP coding stamp point the only time we do stuff on resources is say to check if a database connection attempt returned NULL or a resource

You have a function called get_resource_type() which returns the type of resource like say "file" for the return of an fopen() function but it is just a named identifier and nothing much to work out off..

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!