Hello,

I was just skimming through Traits RFC document on the wiki trying to find a
practical use for them. The first thing that comes to my mind is a Singleton
implementation - this is where I found myself literally "copying" most of
the code in the past. As far as I know there is no way to implement this
pattern properly in PHP without duplicate code (due to lack of multiple
inheritance/templating).

Unfortunately, the same RFC document mentions this for trait methods:

The static modifier is not supported, because it would change the methods
> semantics and references to $this would break.
>

.. and that pretty much defeats Singleton-Trait implementation. Is there any
particular technical/design reasons why traits can't handle $this inside
static methods just like regular static methods do (with a fatal error)?

p.s. a Singleton-Trait implementation could look like:

trait Singleton {
  public static function getInstance() { ... }
}

class Child extends Parent {
  use Singleton;
}

Child::getInstance();

Reply via email to