On Tue, Jan 4, 2022, at 4:35 PM, Kirill Nesmeyanov wrote:
> Hello internals!
>
> Since «traits» are often an indicator of not very good code and many 
> may not use them quite correctly, for example, as helpers, I suggest 
> adding support for the `expects` keyword to indicate that the trait is 
> part of the code decomposition taking into account ISP.
>
> For example:
> ```
> // Definition
>
> trait LoggerTrait expects LoggerInterface
> {
>     // ...
> }
>
> // Usage
>
> class MyService
> {
>     use LoggerTrait; // Fatal Error: Class MyService 
> expects LoggerInterface to be implemented
> }
>
> class MyService2 implements LoggerInterface
> {
>     use LoggerTrait; // OK
> }
> ```
>
> How relevant do you think this idea/proposal is? And what possible 
> problems or solutions will this entail in the future?

I can't say this has ever been an issue for me when using traits.  I've never 
had a trait that needed to be used by a class with a given interface.  What I 
usually have is a trait that is a full or mostly implementation of an 
interface. So this would be much more useful to me:

trait LoggerTrait implements LoggerInterface { ... }

(Perhaps some way to indicate that it mostly implements, and the rest are 
abstract methods?  Or require the other methods to be explicitly abstract?)

I think it's subtly different, as it approaches the question from the other 
direction.

--Larry Garfield

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

Reply via email to