> Den tor. 9. jan. 2020 kl. 22.41 skrev Mike Schinkel <m...@newclarity.net>:
> 
> 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

Reply via email to