A trait 1) is a collection of code that is added dynamically to your class.
It helps to alleviate the limitation of class hierarchy (object inheritance) when:
It follows the composition principe
A trait is not a class. You can't access its members directly. It's basically just automated copy and paste.
For instance, if the class inheritance represents a resource to fetch (ie returns)
As not all resources share this property (or trait) in the class hierarchy, you could create a trait with the respective method (get/set Source).
When importing the trait code with the use keyword, you need to create an alias for the method name that you want to overwrite and use it.
Example:
class myClass
{
use myTrait {
getMyVar as protected getMyVarTraitAlias;
}
public function getMyVar(){
$var = $this->getMyVarTraitAlias();
...
return $var;
}
...
}