Re: [PHP-DEV] [RFC]

This is only part of a thread. view whole thread
  108462
February 11, 2020 11:33 tom@inventis.be (Tom Gerrits)
Hi Manuel

Thanks for bringing this idea forward.

Adding a non-string construct to reference functions uniquely seems 
like a good idea and would be consistent with the existing ::class 
keyword for classes.

I'm wondering if it would be useful to take a page out of the book of 
other programming languages in order to shorten the notation further:

> // First file. > namespace A\B; > > function foo() { } > > // Second file. > use function A\B\foo; > > function bar(callable $c) { } > > > // Current approach. > bar('\A\B\foo'); > > // Notation without parantheses, references imported function. > // Similarly, in the future, Class::method could reference a > // class method. > bar(foo); > > // Notation with references, could be expanded in the future > // for static class methods, such as &Class::method. > bar(&foo);
The second example can already be achieved by defining your own constant that references the fully qualified name and importing it. However, an explicit, separate, import of these constants is still needed, which is not ideal. A suffix "::func" would also be useful, but allowing shorter notation would improve readability when using the functional programming paradigm and composing functions. Op di, feb 11, 2020 at 12:13 schreef Manuel Canga <manuelcanga@gmail.com>:
> Hi internals, > I Would like to present a possible new "::func resolution" for your > consideration. > > In first place, PHP now support "::class" in this way: > > use My\I18N; > > $mapped_array = array_map([I18N::class, 'translate'], $array); > It avoid add Full I18N namespace in callback. > > However with functions is different: > > use function \My\I18N\i18n_translate; > > $mapped_array = array_map('\My\I18N\i18n_translate', $array); > > What is the useful here of importing the function?. > My proposal is ":func" in order to avoid full namespace in callback of > functions. E.g: > > use function \My\I18N\i18n_translate; > > $mapped_array = array_map(i18n_translate::func, $array); > > "::func" should validate if a function with `` is > imported. > In this case, "::func" is replaced with FQN of this function, > otherwise with only "" > > What is your opinion ? Do you see it useful ? > > Thanks and I'm sorry for my English( I'm a Spanish ). > > Regards
  108463
February 11, 2020 11:47 manuelcanga@gmail.com (Manuel Canga)
Hi Tom,

I thought about that short version. However, in order to avoid
conflicts with constants, I chosen "::func". If this is not problem in
low level of PHP, then I agree with you in shorter version is better.

Thanks for your opinion, Tom





On Tue, 11 Feb 2020 at 12:33, Tom Gerrits <tom@inventis.be> wrote:
> > Hi Manuel > > Thanks for bringing this idea forward. > > Adding a non-string construct to reference functions uniquely seems > like a good idea and would be consistent with the existing ::class > keyword for classes. > > I'm wondering if it would be useful to take a page out of the book of > other programming languages in order to shorten the notation further: > > > // First file. > > namespace A\B; > > > > function foo() { } > > > > // Second file. > > use function A\B\foo; > > > > function bar(callable $c) { } > > > > > > // Current approach. > > bar('\A\B\foo'); > > > > // Notation without parantheses, references imported function. > > // Similarly, in the future, Class::method could reference a > > // class method. > > bar(foo); > > > > // Notation with references, could be expanded in the future > > // for static class methods, such as &Class::method. > > bar(&foo); > > The second example can already be achieved by defining your own > constant that references the fully qualified name and importing it. > However, an explicit, separate, import of these constants is still > needed, which is not ideal. > > A suffix "::func" would also be useful, but allowing shorter notation > would improve readability when using the functional programming > paradigm and composing functions. > > Op di, feb 11, 2020 at 12:13 schreef Manuel Canga > <manuelcanga@gmail.com>: > > Hi internals, > > I Would like to present a possible new "::func resolution" for your > > consideration. > > > > In first place, PHP now support "::class" in this way: > > > > use My\I18N; > > > > $mapped_array = array_map([I18N::class, 'translate'], $array); > > It avoid add Full I18N namespace in callback. > > > > However with functions is different: > > > > use function \My\I18N\i18n_translate; > > > > $mapped_array = array_map('\My\I18N\i18n_translate', $array); > > > > What is the useful here of importing the function?. > > My proposal is ":func" in order to avoid full namespace in callback of > > functions. E.g: > > > > use function \My\I18N\i18n_translate; > > > > $mapped_array = array_map(i18n_translate::func, $array); > > > > "::func" should validate if a function with `` is > > imported. > > In this case, "::func" is replaced with FQN of this function, > > otherwise with only "" > > > > What is your opinion ? Do you see it useful ? > > > > Thanks and I'm sorry for my English( I'm a Spanish ). > > > > Regards > >