Bug #71518 [Opn->Sus]: Return type hinting for resources

From: Date: Wed, 03 Feb 2016 23:06:41 +0000
Subject: Bug #71518 [Opn->Sus]: Return type hinting for resources
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-199038@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 Updated by: requinix@php.net Reported by: almamu at almamu dot com Summary: Return type hinting for resources -Status: Open +Status: Suspended Type: Bug Package: Variables related Operating System: Ubuntu 12.04 PHP Version: 7.0.2 Block user comment: N Private report: N New Comment: IIRC resources were specifically not considered because of two main reasons: 1. "resource" alone isn't helpful: you could have a file handle or GD image or mysqli connection handle with prepareCURLResource() and PHP wouldn't know that you're using the wrong type of value. 2. resources are old and really should be converted into classes and objects instead. GMP is an example. That would, of course, take quite a bit of work, plus there's the logistics of how to handle things like is_resource(). Check the internals mailing list for discussions about this stuff. RFCs: - https://wiki.php.net/rfc/scalar_type_hints_v5 - https://wiki.php.net/rfc/return_types - https://wiki.php.net/rfc/resource_typehint Previous Comments: ------------------------------------------------------------------------ [2016-02-03 22:57:26] almamu at almamu dot com 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 ------------------------------------------------------------------------ [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

« previous php.bugs (#199038) next »