On 11 December 2017 at 08:58, Marco Pivetta <ocram...@gmail.com> wrote:
> What's the use-case for creating a userland `ReflectionType` instance,
> besides mocking the reflection API itself?
> Consider that the subclassing in userland already provides an easy way to
> perform these operations (although ugly):
> https://github.com/Roave/BetterReflection/blob/2.0.1/src/Reflection/Adapter/ReflectionType.php

You are right.
And it does not even need BetterReflection library, it only needs one
single class which can also be defined locally.
It only needs $this->name, $this->allowsNull and $this->isBuiltin as
private properties.

(nothing against the library, just in case someone only needs this one feature)



Still, I think having a documented native constructor and/or static
factories would make this API more complete.
Without this, it seems like someone walked away from a construction site.

Also, inheriting from core reflection classes, I imagine always
carries some baggage.
(as opposed to implementing an interface)



>
> Not trying to drag down your proposal, but as you can see this is already
> being done and works very well and is very well tested for BC compliance
> (should new methods land into `ReflectionType`).
>
> Also, I'd add that a the proposed API should accept
> `InternalType|ReflectionClass|null`, and not `string` (separate named
> constructors would be best) which is basically the reason for most
> hair-pulling around the PHP lang.
>
> A small `InternalType` VO that throws on `InternalType::fromString() : self`
> would be extremely beneficial to avoid the continuously growing list of edge
> cases and additions required to accommodate for new internal types being
> added to the language.
>
> On 11 Dec 2017 08:25, "Andreas Hennings" <andr...@dqxtech.net> wrote:
>
> Currently there is no (documented) way to directly create a
> \ReflectionType object.
> The class has no documented constructor.
>
> I propose that static factory methods shall be added for this purpose.
>
> This will be useful for code that wants to dynamically create and pass
> around reflection type objects.
>
>
> /** @var bool $allowsNull */
>
> $t1 = \ReflectionType::fromBuiltinType('string', $allowsNull);
> $t2 = \ReflectionType::fromClassName(\stdClass::class, $allowsNull);
>
> assert(true === $t1->isBuiltin());
> assert(false === $t2->isBuiltin());
>
> assert('string' === $t1->getName());
> assert(\stdClass::class === $t2->getName());
>
>
> To be discussed:
> - method names
> - Whether to return ReflectionNamedType or ReflectionType or something else.
>
> (I don't find ReflectionNamedType documented in
> http://php.net/manual-lookup.php?pattern=ReflectionNamedType)
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

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

Reply via email to