PHP中后期静态绑定

摘要

有些时候,我们在定义类的时候有某些特殊需求,举个例子:

父类访问子类的静态变量或常量如何做,对于这个问题,一开始确实让人有点转不过弯来。具体看代码演示:

有些时候,我们在定义类的时候有某些特殊需求,举个例子:

父类访问子类的静态变量或常量如何做,对于这个问题,一开始确实让人有点转不过弯来。具体看代码演示:

  1. class Person {
  2.   function getVal() {
  3.     // 此处如何echo $name?
  4.   }
  5. }
  6. class S1 extends Person {
  7.   static $name = 's1';
  8. }
  9. class S2 extends Person {
  10.   static $name = 's2';
  11. }
  12. $s1 = new S1;
  13. $s1->getVal();
  14. $s2 = new S2;
  15. $s2->getVal();

针对这样的问题,有人可能想到的是通过类名去实现,如果明确知道哪个类名还是可以的,但是如果不确定类名此时就显得有些捉襟见肘了。这时后期静态绑定便能很好的解决问题,代码如下:

  1. class Person {
  2.   function getVal() {
  3.     // static代表调用的类
  4.     echo static::$name;
  5.   }
  6. }
  7. class S1 extends Person {
  8.   static $name = 's1';
  9. }
  10. class S2 extends Person {
  11.   static $name = 's2';
  12. }
  13. $s1 = new S1;
  14. $s1->getVal();
  15. $s2 = new S2;
  16. $s2->getVal();
shaw

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: