通过抽象保护函数返回?

时间:2010-04-19 17:08:31

标签: php class function kohana

我正在查看Kohana 3中的auth类以及登录脚本。当登录页面调用auth类的登录功能时,它将通过受保护的抽象函数_login返回。你为什么要出于好奇呢?我似乎无法理解什么是真正的区别,因为你将以任何方式返回相同的数据。在我脑海中游来游戏的一个选择是,通过一个受保护的摘要返回,你将确保数据从它被放入auth->登录功能的时间和它离开它的时间没有被修改。我想了解一些细微差别。感谢。

 public function login($username, $password, $remember = FALSE)
 {
  if (empty($password))
   return FALSE;

  if (is_string($password))
  {
   // Get the salt from the stored password
   $salt = $this->find_salt($this->password($username));

   // Create a hashed password using the salt from the stored password
   $password = $this->hash_password($password, $salt);
  }

  return $this->_login($username, $password, $remember);
 }

然后......

 abstract protected function _login($username, $password, $remember);

1 个答案:

答案 0 :(得分:2)

这是模板方法设计模式的一个弱例子。每次有人想登录时,都必须对变量进行多次修改和检查。密码不能为空。密码必须经过哈希处理。

然后尝试登录用户。现在,这个函数是抽象的原因是登录例程可以用许多不同的方式实现;对于许多不同的数据库,有或没有会话等。

这个函数受到保护的原因是你不希望任何人直接调用_login的具体实现,而不首先运行先前的检查和修改(哈希密码等)。

总而言之,在调用真实登录函数的具体实现之前,它已经以这种方式编码以强制所有登录请求首先检查密码的长度,然后密码被散列。