|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #78481 Can't use resource as typed param
Submitted: 2019-08-31 08:26 UTC Modified: 2019-08-31 18:55 UTC
From: momchil at bojinov dot info Assigned:
Status: Duplicate Package: *General Issues
PHP Version: 7.4.0beta4 OS: Windows 10
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
Block user comment
Status: Assign to:
Bug Type:
From: momchil at bojinov dot info
New email:
PHP Version: OS:


 [2019-08-31 08:26 UTC] momchil at bojinov dot info
I am trying to use resource for parameter type but I get TypeError

Test script:
$Picture = imagecreatetruecolor(100, 100);

class bla
	public function forPChart(resource $picture, $X, $Y)

(new bla())->forPChart($Picture, 0 ,0);

Expected result:

Actual result:
Fatal error: Uncaught TypeError: Argument 1 passed to bla::forPChart() must be an instance of resource, resource given, called in E:\xxx\test.php on line 13 and defined in E:\xxx\test.php:7
Stack trace:
#0 E:\xxx\test.php(13): bla->forPChart(Resource id #4, 0, 0)
#1 {main}
  thrown in E:\xxx\test.php on line 7


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2019-08-31 08:46 UTC]
-Status: Open +Status: Not a bug
 [2019-08-31 08:46 UTC]
resource is not available as for type declarations because it says nothing about what type of resource it is. Your function would allow GD resources, but also file streams and cURL handles and other things you don't want. The type would be a false sense of security and so is not supported.
 [2019-08-31 08:56 UTC] momchil at bojinov dot info
I get that. I just find the wording of the error ambiguous
Why would resource even be accepted as a type ?
 [2019-08-31 18:55 UTC]
-Status: Not a bug +Status: Duplicate
 [2019-08-31 18:55 UTC]
The "must be an instance of resource, resource given" confusion sounds familiar but I can't find an existing bug for it. I'm not sure it's easily fixable anyways as what's happening is that PHP is trying to get a variable that's an instance of a class ("resource") and it found a non-object variable type (a resource) instead - the error message just fills in a "must be an instance of $expected, $actual given" template.

Anyway, I did find bug #71518 from 2016 where I gave a more helpful answer.
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Wed Jan 22 11:01:23 2020 UTC