1. <?PHP 
  2. /* 关于php面向对象动态绑定和静态绑定的理解 */ 
  3.  
  4. // 1,理解public  protected  private 访问级别 
  5.      
  6. // eg:视图继承父类private级别的属性和方法 
  7. class User 
  8.     private $name = "wxp"
  9.     private function setName($name
  10.     { 
  11.         if(isset($this->name)) 
  12.         { 
  13.             $this->name = $name
  14.         } 
  15.     } 
  16. class sUser extends User 
  17.      
  18. $sUser = new sUser(); 
  19. // print_r($sUser->name); //  输出:未能访问到父类private属性 
  20.  
  21. // 2,动态绑定 
  22.     // 继承时会发生动态绑定,即:子类复写父类的方法或成员,当该方法或成员被调用时,会判断调用其的实例,是属于哪个类的实例就调用谁的。 
  23.     // 注意该成员或方法的访问级别若是private则会发生静态绑定 
  24.  
  25. class Users 
  26.     protected function isPassed() 
  27.     { 
  28.         return false; 
  29.     } 
  30.     public function delUsers() 
  31.     { 
  32.         if(!$this->isPassed()) 
  33.         { 
  34.             print('error'); 
  35.             return false; 
  36.         } 
  37.         else 
  38.         { 
  39.             print("ok"); 
  40.         } 
  41.     } 
  42. class PassUsers extends Users 
  43.     protected function isPassed() 
  44.     { 
  45.         return true; 
  46.     } 
  47.  
  48. $users = new Users(); 
  49. $passusers = new PassUsers(); 
  50. // $users->delUsers();   //echo :error 
  51. // $passusers->delUsers();   //echo : ok 
  52.  
  53. // 3 模拟静态绑定      
  54.     // private 级别的成员或方法只属于当前类,父类,所以即使子类重写,他几经在父类编译时期静态绑定,不会调用子类重写的isPassed方法。 
  55.  
  56. class Users_ 
  57.     private function isPassed() 
  58.     { 
  59.         return false; 
  60.     } 
  61.     public function delUsers() 
  62.     { 
  63.         if(!$this->isPassed()) 
  64.         { 
  65.             print('error'); 
  66.             return false; 
  67.         } 
  68.         else 
  69.         { 
  70.             print("ok"); 
  71.         } 
  72.     }    
  73. class PassUsers_ extends Users_ 
  74.     private function isPassed() 
  75.     { 
  76.         return true; 
  77.     } 
  78. $users_ = new Users_(); 
  79. $passusers_ = new PassUsers_(); 
  80. $users_->delUsers();   //echo :error 
  81. $passusers_->delUsers();   //echo : error