• Trait与单例

    Trait与单例

    1. trait A{
    2. private static $instance;
    3. static function getInstance()
    4. {
    5. if(!isset(self::$instance)){
    6. self::$instance = new static();
    7. }
    8. return self::$instance;
    9. }
    10. }
    11. class B{
    12. use A;
    13. function a()
    14. {
    15. var_dump('call at B');
    16. }
    17. }
    18. class C extends B{
    19. function a()
    20. {
    21. var_dump('call at c');
    22. parent::a(); // TODO: Change the autogenerated stub
    23. }
    24. }
    25. class D extends B{
    26. use A;
    27. function a()
    28. {
    29. var_dump('call at D');
    30. parent::a(); // TODO: Change the autogenerated stub
    31. }
    32. }
    33. $b = B::getInstance();
    34. $c = C::getInstance();
    35. $d = D::getInstance();
    36. $c->a();
    37. $d->a();

    以上输出:

    1. string(9) "call at B"
    2. string(9) "call at D"
    3. string(9) "call at B"