Bug #71518 [Opn]: Return type hinting for resources
| From: | almamu at almamu dot com | Date: | Wed, 03 Feb 2016 22:57:27 +0000 |
| Subject: | Bug #71518 [Opn]: Return type hinting for resources | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-199037@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=71518&edit=1
ID: 71518
User updated by: almamu at almamu dot com
Reported by: almamu at almamu dot com
Summary: Return type hinting for resources
Status: Open
Type: Bug
Package: Variables related
Operating System: Ubuntu 12.04
PHP Version: 7.0.2
Block user comment: N
Private report: N
New Comment:
Whopsie, wrote a fast example and made a mistake on one of the var names. The last line of the
example should be:
echo htmlentities(curl_exec($res));
Although, this does not change the current result of the code as it stops at the $res declaration
Previous Comments:
------------------------------------------------------------------------
[2016-02-03 22:55:39] almamu at almamu dot com
Description:
------------
The return type hinting is not working as expected, in this case I want to return a
"resource" (such as the ones returned by curl functions, mysql functions, etc) but PHP
thinks I must return an instance of an (non-existant) "resource" class, which breaks the
purpose of the return type hinting in this function, the documentation on this lacks some specific
information for some php types (like mixed, object and resource), so I may be making a mistake here
(and probably too much assumptions).
Test script:
---------------
<?php
declare(strict_types=1);
function prepareCURLResource(string $url) : resource
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_COOKIEFILE, "/tmp");
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3);
return $curl;
}
$res = prepareCURLResource("http://localhost");
echo htmlentities(curl_exec($curl));
Expected result:
----------------
The source code of the given URL (http://localhost) in this case.
Actual result:
--------------
[Wed Feb 03 22:46:42 2016] [warn] [client 192.168.100.2] mod_fcgid: stderr: PHP Fatal error:
Uncaught TypeError: Return value of prepareCURLResource() must be an instance of resource, resource
returned in /var/www/test.php:12
[Wed Feb 03 22:46:42 2016] [warn] [client 192.168.100.2] mod_fcgid: stderr: Stack trace:
[Wed Feb 03 22:46:42 2016] [warn] [client 192.168.100.2] mod_fcgid: stderr: #0
/var/www/test.php(15): prepareCURLResource('http://localhost')
[Wed Feb 03 22:46:42 2016] [warn] [client 192.168.100.2] mod_fcgid: stderr: #1 {main}
[Wed Feb 03 22:46:42 2016] [warn] [client 192.168.100.2] mod_fcgid: stderr: thrown in
/var/www/test.php on line 12
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=71518&edit=1