Does PHP 7 support strict typing for resources? If so, how?
For example:
declare (strict_types=1);
$ch = curl_init ();
test ($ch);
function test (resource $ch)
{
}
The above will give the error:
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of resource, resource given
A var_dump on $ch
reveals it to be resource(4, curl), and the manual says curl_init ()
returns a resource.
Is it at all possible to strictly type the test()
function to support the $ch variable
?
resource
is not a valid type so it's assumed to be a class name as per good old PHP/5 type hints. Butcurl_init()
does not return an object instance.As far as I know there's not way to specify a resource. It probably wouldn't be so useful since not all resources are identical: a resource generated by
fopen()
would be useless foroci_parse()
.PHP does not have a type hint for resources because
However, you can use
is_resource()
within the function/method body to verify the passed argument and handle it as needed. A reusable version would be an assertion like this:which you could then use within your code like that: