php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #76049 ReflectionParameter::__construct() accepts an array for $function
Submitted: 2018-03-05 11:12 UTC Modified: 2018-03-05 12:25 UTC
From: benjamin dot morel at gmail dot com Assigned:
Status: Open Package: Reflection related
PHP Version: Irrelevant OS: N/A
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2018-03-05 11:12 UTC] benjamin dot morel at gmail dot com
Description:
------------
The ReflectionParameter constructor is documented as accepting a string only for the first parameter:

http://php.net/manual/en/reflectionparameter.construct.php

However, as mentioned in a comment on that page, it also accepts an array containing a class name and a method name.

Test script:
---------------
class Foo {
    function bar($baz) {}
}
$r = new ReflectionParameter(array('Foo', 'bar'), 'baz');
echo $r->getName();

Expected result:
----------------
public ReflectionParameter::__construct ( string|array $function , string $parameter )

Actual result:
--------------
public ReflectionParameter::__construct ( string $function , string $parameter )

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2018-03-05 11:27 UTC] requinix@php.net
-Package: Documentation problem +Package: Reflection related
 [2018-03-05 11:27 UTC] requinix@php.net
Valid strings and arrays, \Closures, and objects with __invoke are supported.

"callable" would be the most appropriate type.
 [2018-03-05 12:11 UTC] benjamin dot morel at gmail dot com
True, but it also accepts arrays representing private and non-static methods, which are not callable:

---

class Foo {
  private function bar($baz) {}
}

function test(callable $function) {}

$function = ['Foo', 'bar'];

// works as expected
echo (new \ReflectionParameter($function, 'baz'))->getName();

// Deprecated:  Non-static method Foo::bar() should not be called statically
// TypeError: Argument 1 passed to test() must be callable, array given
test($function);

---

What about callable|array then, with a note about acceptable arrays?
 [2018-03-05 12:25 UTC] requinix@php.net
I would keep "callable" and say that the $function doesn't have to be accessible by the calling scope.
If not that, "mixed" and explain in the parameters section.
 [2018-03-05 12:49 UTC] benjamin dot morel at gmail dot com
I'm afraid that callable is a bit misleading as it means something very precise in PHP, I'd go with mixed then.

The most important is to list exactly what types are allowed in the doc.
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Sun Jun 16 21:01:28 2019 UTC