Earlier today I was doing research on PHP's abstract classes, interfaces, and traits.
As far as I can tell, an abstract class says "anything using me will be using these methods and attributes", interfaces say "anything using me must have these methods and attributes", and traits say "anything using me will also have these methods and attributes".
Now, my question is, if you get the equivalent of an abstract class when you use an interface and a trait, why are there abstract classes?
If I'm wrong and an interface and a trait aren't the equivalent of an abstract class, can you please explain why that's not the case?