DEV Community

Discussion on: Breaking Encapsulation with traits in PHP

Collapse
 
deceze profile image
David Zentgraf

Hmm, I believe a better alternative would have been what you discussed in another comment: have the trait call a method on its host class to set the name, and define that method as abstract within the trait. That establishes clear interfaces and demonstrates how to use traits "safely".

Using composition which instead does nothing doesn't seem terribly useful… :)

Thread Thread
 
purplebooth profile image
Billie

I don't agree with this.

It's too easy for people to use traits unsafely. Sure everyone on your team might know to do that, but when a new person joins your team how do you maintain that culture.

There is also a large number of people in the PHP community generally who also don't know use them safely. That's a tough cultural fight, that I'd rather not have.

Better not to have traits in the first place, use standard composition. You don't have to fight culture, and it has no negative impact on your code.

Thread Thread
 
deceze profile image
David Zentgraf

So basically you're saying don't use traits? That's certainly one position to have. I think they can be useful in certain situations, so eschewing them entirely is maybe throwing out the baby with the bathwater. But I agree that you need to know why they can be bad if you do use them.