> Den tor. 9. jan. 2020 kl. 22.41 skrev Mike Schinkel <[email protected]>:
>
> Traits are compiler assisted code copy/paste and not contracts (unlike
> interfaces), so there is no gain in having ::trait.
It can already be referring to using ::class so it makes little sense to
disallow ::trait unless there is a different reason not to add another
::keyword.
Traits are symbols, so it is not unreasonable that there would be a way to
access it symbolically so that the reference can be type checked.
One of my use-cases for referring to traits is to provide helpful hints in
error messages, i.e.:
printf( '%s does not implement %s. You can easily implement that interface by
using %s',
get_class( $this ),
Interfaces\Foo::interface,
Traits\Foo::trait,
);
>> use Interfaces;
>> if ( implements_interface( $object, Interfaces\MyInterface::interface,
>> $trigger_error = true )) {
>> return;
>> }
> If your $object variable is an actual instance, you can use the
> instanceof operator, it treats the right operand as a first class
> citizen and allows you to skip writing ::class:
But the instanceof operator does not fulfill my requirements. I manage error
triggering during development and logging during production within the
function. Thus I can just use the implements_interface() function to handle
errors automatically when I am testing an assertion vs. using it just for
branching.
You'll note I explicitly included a third parameter `$trigger_error = true` in
hopes people would notice, realize what I was doing and not think that I needed
to be educated on the existence of instanceof.
-Mike
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php