On Sun, May 19, 2024 at 10:30 AM Peter Stalman <sarke...@gmail.com> wrote:
> Hi Internals, > > Obviously we can't use constants or functions directly in strings using > variable parsing, I assume because it lacks the easily detectable $. > > However, we _can_ use methods because the object variable has the $, which > I assume is the reason methods work and functions don't. > > I feel like it's something that _could_ have been added when dynamic > access of static members support was added in 5.3.0, but maybe it was > overlooked or decided against? Consider: > > ``` > <?php > > $a = new A(); > > echo " {A::$static_property} \n"; // doesn't work (unless $static_property > is a variable) > echo " {$a::$static_property} \n"; // works > > echo " {A::static_method()} \n"; // doesn't work (just text) > echo " {$a::static_method()} \n"; // works > > echo " {A::constant} \n"; // doesn't work > echo " {$a::constant} \n"; // doesn't work either, but why? > > ?> > ``` > > > Also, as a side note, why does this hack below work? It seems like > something that would use `eval()`, but doesn't. Take a look: > > https://3v4l.org/aPCSD > > I found it at the bottom of the manual entry for Strings[1]. Not > something I would use, but it's interesting to see. > > Thanks, > Peter > > [1]: https://www.php.net/manual/en/language.types.string.php#91628 > Hi, Peter! > Also, as a side note, why does this hack below work? It's not a hack. Variables, including callable ones with any arguments are allowed to be interpolated. See another example: https://3v4l.org/BJUvL -- Regards, Valentin Udaltsov