On Wed, Feb 12, 2020 at 4:58 AM Mike Schinkel <m...@newclarity.net> wrote:
>
> Or best would be to add ::nameof for functions, method, classes, interfaces 
> and traits

One problem is how would `x::nameof` resolve when you have several `x`
symbols (of distinct kinds) in scope?

```
namespace Theirs {

class Foo {}
const BAR = 2;
function qux() { return '3'; }

}

namespace Mine {

use Theirs\Foo as x;
use const Theirs\BAR as x;
use function Theirs\qux as x;

var_dump(new x); // object(Theirs\Foo)#1
var_dump(x); // int(2)
var_dump(x()); // string(1) "3"

// *** hypothetical: ***

assert(x::class === 'Theirs\Foo');
assert(x::const === 'Theirs\BAR');
assert(x::function === 'Theirs\qux');

assert(x::nameof === ???);

}
```

> Returning a _closure_ instead of a string would be providing a feature we 
> _already_ have instead of one we do _not_ have.
>
> If we had ::function returning a string we could use Closure::fromCallable() 
> to get a closure.  Or today just use fn() => myfunc().
>
> But if ::function instead returned a closure then there still would be no way 
> to extract the name of a function as a string from a symbol where PHP can 
> throw a warning if it does not recognize the symbol, such as in the case of a 
> typo.
>
> Seems to me having a shorter syntax to get a closure is an orthogonal concern.
>
> If we want a shorthand for closure we should create an additional syntax for 
> it but still provide a way to extract a function's name as a string from its 
> symbol since that is currently _not_ possible. Getting a closure from a 
> function symbol currently _is_ possible.
>
> Much better to provide  ::function to return the name of the function and 
> ::closure get a closure that can call the function.
>
> Or have  ::function to return the name of the function and provide a syntax 
> something like ${myfunc} to return a closure, which has been suggested later 
> in this thread.

That might deserve consideration indeed...

-- 
Guilliam Xavier

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to