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