[PHP 4, PHP 5, PHP 7, PHP 8]
is_resource — Finds whether a variable is a resource
Description
is_resource[mixed $value
]: bool
Parameters
value
The variable being evaluated.
Return Values
Returns true
if value
is a resource, false
otherwise.
Examples
Example #1 is_resource[] example
The above example will output:
Notes
Note:
is_resource[] is not a strict type-checking method: it will return
false
ifvalue
is a resource variable that has been closed.
btleffler [AT] gmail [DOT] com ¶
11 years ago
I was recently trying to loop through some objects and convert them to arrays so that I could encode them to json strings.
I was running into issues when an element of one of my objects was a SoapClient. As it turns out, json_encode[] doesn't like any resources to be passed to it. My simple fix was to use is_resource[] to determine whether or not the variable I was looking at was a resource.
I quickly realized that is_resource[] returns false for two out of the 3 resources that are typically in a SoapClient object. If the resource type is 'Unknown' according to var_dump[] and get_resource_type[], is_resource[] doesn't think that the variable is a resource!
My work around for this was to use get_resource_type[] instead of is_resource[], but that function throws an error if the variable you're checking isn't a resource.
So how are you supposed to know when a variable is a resource if is_resource[] is unreliable, and get_resource_type[] gives errors if you don't pass it a resource?
I ended up doing something like this:
The @ operator suppresses the errors thrown by get_resource_type[] so it returns null if $possibleResource isn't a resource.
I spent way too long trying to figure this stuff out, so I hope this comment helps someone out if they run into the same problem I did.
CertaiN ¶
8 years ago
Try this to know behavior:
It will be shown as...
[Check Valid Resource]
[bool]$resource => TRUE
get_resource_type[$resource] => stream
is_resource[$resource] => TRUE
[Check Released Resource]
[bool]$resource => TRUE
get_resource_type[$resource] => Unknown
is_resource[$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_resource[$resource] => FALSE
Anonymous ¶
4 years ago
Note that is_resource[] is unreliable. It considers closed resources as false:
There's a much better solution... In fact, I just showed it above, but here it is again with a more complete example: Like this! - An active resource is a resource, so check that first for efficiency. Just surfed by and saw the bad and hacky methods other people had left, and wanted to help out with this proper technique. Good luck, everyone! PS: The core problem is that is_resource[] does a "loose" check for "living resource". I wish that it had a $strict parameter for "any resource" instead of these user-workarounds being necessary.
That's the reason why some other people here have been confused and devised some complex [bad] "solutions" to detect resources...
So how do you check if something is a resource?
How it works:
- Then branch to check what the variable is NOT:
- A resource is never NULL. [We do that check via `!== null` for efficiency].
- A resource is never Scalar [int, float, string, bool].
- A resource is never an array.
- A resource is never an object.
- Only one variable type remains if all of the above checks succeeded: IF it's NOT any of the above, then it's a closed resource!