Doc #76049 [Com]: ReflectionParameter::__construct() accepts an array for $function
| From: | benjamin dot morel at gmail dot com | Date: | Mon, 05 Mar 2018 12:49:16 +0000 |
| Subject: | Doc #76049 [Com]: ReflectionParameter::__construct() accepts an array for $function | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-15493@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=76049&edit=1
ID: 76049
Comment by: benjamin dot morel at gmail dot com
Reported by: benjamin dot morel at gmail dot com
Summary: ReflectionParameter::__construct() accepts an array
for $function
Status: Open
Type: Documentation Problem
Package: Reflection related
Operating System: N/A
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
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.
Previous Comments:
------------------------------------------------------------------------
[2018-03-05 12:25:45] 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:11:54] 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 11:27:39] requinix@php.net
Valid strings and arrays, \Closures, and objects with __invoke are supported.
"callable" would be the most appropriate type.
------------------------------------------------------------------------
[2018-03-05 11:12:47] 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 )
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=76049&edit=1