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