Doc #76049 [Com]: ReflectionParameter::__construct() accepts an array for $function

From: 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

« previous php.doc.bugs (#15493) next »