On 11 December 2017 at 09:16, Marco Pivetta <ocram...@gmail.com> wrote: > If you really want to expose a symbol's FQN,
Just to clarify: For me, "FQN" means "fully-qualified name", which begins with "\\". This is specifically not what I propose here. I want the name without the leading namespace separator. So maybe "getFullName()" is misleading. > I suggest exposing the internal > name as per `(array)` cast semantics. This distinction is not needed here. The semantics for array keys in array-to-object casting are to distinguish overshadowed private properties from parent classes. This is because values for these properties can coexist within one object. E.g. class B { private $x = 'b'; } class C extends B { private $x = 'c'; } var_export((array)(new C)); Output: https://3v4l.org/0QE3s array ( '' . "\0" . 'C' . "\0" . 'x' => 'c', '' . "\0" . 'B' . "\0" . 'x' => 'b', ) For ReflectionClass->getProperties() and ->getProperty($name) only gives us the version of each property that is visible on the top level. https://3v4l.org/LWWSf E.g. $obj = new (new \ReflectionClass(C::class)->getProperty('x') > > namespace A { > class B { > public $c; > private $d; > private $e; > } > } > > That would be: > > "A\B#\$c" > "A\B#\0*\0\$d" > "A\B#\0A\\B\0\$e" > > Obviously, the `\0` is horrible and can probably be improved: depends on > whether the API is intended for human or machine consumption. If it is > machine consumption, strings are the wrong approach anyway. Machine or human? One goal is that these names can be used as array keys or unique identifiers whenever we deal with a collection of reflectors of mixed type. At the same time, the name is designed to be very close to what is printed in exception messages, @see doc comment, etc. In this case, I don't see a conflict between human-readable and machine-readable. Maybe when you say "machine consumption" you are thinking of something else? > > I'd also add that this would be (fucking finally!) a good way to fix PHP's > documentation horrible usage of `::` for both instance and static members. Ok, tbh, so far I thought of using the same "::" for both :) So for all properties it would be Cat::$color. Maybe instead we could do Cat->color for instance members? -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php