New to PHP 5.4: Traits – Simas Toleikis.
Really geeking out at the fact that PHP 5.4 includes traits. If you’re not familiar with traits, they’re a method of inheritance somewhat like extending classes. Simas does a great job of explaining the intimate details of traits in PHP 5.4, so I’ll leave it at my excitement about using something like this soon(ish):
trait Singleton {
public static function getInstance() { ... }
}
class A {
use Singleton;
// ...
}
class B extends ArrayObject {
use Singleton;
// ...
}
// Singleton method is now available for both classes
A::getInstance();
B::getInstance();
Sweet.
Comments
Yep, it can be really useful, but I’m wondering : what is the priority if a trait contain a method that is already defined by the class or the parent class? What if two traits declaring the same method are used?
Example:
trait SingletonT1 {
public static function getInstance() { … }
}
trait SingletonT2 {
public static function getInstance() { … }
}
class SingletonC {
public static function getInstance() { … }
}
class A extends SingletonC {
use SingletonT1;
use SingletonT2;
// …
}
Which code of getInstance() will be used in this case ? SingletonT1’s ? SingletonT2’s ? SingletonT1’s ?
P.S.: I know in this case there is no reason of using SingletonT1 or SingletonT2, but in a more complex case it could occur.
That should report a trait method confliction unless you handle them explicitly.