| ivate方法identify()。
Listing 6.11 Binding and private members
class Father { private $salutation = "Hello there!";
public function getSalutation() { print("$this->salutationn"); $this->identify(); }
private function identify() { print("I am Father. n"); } }
class Son extends Father { private $salutation = "Hey!"; private function identify() { print("I am Son. n"); } }
$obj = new Son(); $obj->getSalutation(); //输出Hello there! I am Father. ?>
动态绑定的好处是允许继承类来改变父类的行为,同时可以保持父类的接口和功能,看例子6.12. 由于使用了动态绑定,在deleteUser中被调用的isAuthorized的version 可以由对象的类型来确定。如果是一个普通的user,PHP调用User::isAuthorized会返回FALSE.如果是一个AuthorizedUser的实例,PHP调用AuthorizedUser::isAuthorized,将允许deleteUser顺利执行。
//haohappy注:用一句话说清楚,就是对象类型与方法,属性绑定. 调用一个父类与子类中都存在的方法或访问一个属性时,会先判断实例属于哪种对象类型,再调用相应的类中的方法和属性.
Listing 6.12 动态绑定的好处
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的类成员模拟静态绑定? 为了回答这个问题, 你需要回忆一下为什么需要有 上一页 [1] [2] [3] 下一页 |