Re: [RFC]
| From: | Rowan Tommins | Date: | Thu, 13 Feb 2020 07:57:56 +0000 |
| Subject: | Re: [RFC] | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-108531@lists.php.net to get a copy of this message | ||
On 12 February 2020 23:12:34 GMT+00:00, Manuel Canga <manuelcanga@gmail.com> wrote:
>El mié., 12 feb. 2020 23:01, Rowan Tommins <rowan.collins@gmail.com>
>escribió:
>In your example, you has the same options:
>
>>
>1. Change import
>2. Add namespace:
>
>['Acme\Global\I18N',\translate::function]
There is no collision between 'Foo::translate()' and 'translate()', so there is
no reason to change the import. That's true of executing the functions, so it should remain be
true of resolving them to strings.
>Explain:
>
>When you do: [ class, method ] or [ $object, method ]. Method has not
>namespace, you write it without namespace( like global functions )
I think this is where we are thinking differently. A method name is not "like a global
function", it's just a name; it doesn't belong in the same category.
You might have any number of classes that use the same method name, but with completely different
parameters and purpose, so "a method named foo" isn't a useful concept outside some
specific class or interface.
On the other hand, you can only have one function with a particular fully-qualified name, and the
proposed feature is a way of referencing that.
>Other example:
>
>$class = \MyClass::class;
>$method = \method::function;
>
>and...
>
>$class = '\MyClass';
>$method = 'method';
>
>$obj = new $class();
>$obj->$method();
>
>Both are the same, but first is more semantic.
This isn't semantic at all - it works only because \method::function happens to return the
string you want, but so does \method::class; neither is actually labelling it as what it is, which
is a method within class \MyClass.
Importantly, it might not work at all, if ::function gives an error if the function doesn't
exist.
Regards,
--
Rowan Tommins
[IMSoP]