Private成员只存在于它们所在的类内部. 不像public和protected成员那样,PHP模拟静态绑定. 看例子6.11。它输出”Hello there! I am Father.”,尽管子类覆写了salutation的值,脚本将this->salutation和当前类Father绑定. 类似的原则应用于private方法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顺利执行。
