background image

动态绑定的好处
<?php
   class User //用户
   {
       protected function isAuthorized()  //是否是验证用户
       {
           return(FALSE);
       }
       public function getName()  //获得名字
       {
           return($this->name);
       }
       public function deleteUser($username) //删除用户
       {
           if(!$this->isAuthorized())
           {
               print("You are not authorized.\n");
               return(FALSE);
           }
           //delete the user
           print("User deleted.\n");
       }
   }
   class AuthorizedUser extends User //认证用户
   {
       protected function isAuthorized() //覆写 isAuthorized()
       {
           return(TRUE);
       }
   }
   $user = new User;
   $admin = new AuthorizedUser;
   //not authorized
   $user->deleteUser("Zeev");
   //authorized
   $admin->deleteUser("Zeev");
?>
为什么 private 的类成员模拟静态绑定? 为了回答这个问题, 你需要回忆一下为什么需要有
private 成员.什么时候用它们来代替 protected 成员是有意义的?
private 成员只有当你不想让子类继承改变或特殊化父类的行为时才用到. 这种情况比你想
像的要少. 通常来说,一个好的对象分层结构应当允许绝大多数功能被子类特殊化,改进,或
改变?这是面向对象编程的基础之一. 一定的情况下需要 private 方法或变量,例如当你确信
你不想允许子类改变父类中的某个特定的部份.