比方说,我有三大类:PHP OO登录和注册
User.php
Password.php
Database.php
学习更多OOP的利益,我有一些,希望能简单回答,提问。由于我仍然不完全明白。
我想完成一些事情。从开始到底部:
- 连接到数据库
- 抓住基础上,发布用户名用户的密码
- 验证散列密码张贴密码
- 登录的用户,并将其重定向到某一页
我想使用方法:
哈希密码(当用户REGIST ERS):
public function hash($password)
{
return password_hash($password, PASSWORD_BCRYPT);
}
拼抢从数据库中哈希密码:
public function hashFromDatabase($username)
{
$stmt = $this->mysqli->db->prepare("SELECT password FROM users where username = :username");
$stmt->execute(array(':username' => $username));
$row = $stmt->fetch();
return $row->password;
}
验证密码(当用户登录):
public function verify($password, $hash)
{
if (!password_verify($password, $hash)) {
return false;
}
return true;
}
现在我已经是以下纯粹用于测试目的,在index.php中:
require 'vendor/autoload.php';
use App\User;
$user = new User;
$user->setUsername('username');
$user->setPassword('password');
echo $user->login();
通过setUsername和setPassword是简单的setter:
public function setPassword($password)
{
$this->password = $password;
}
public function setUsername($username)
{
$this->username = $username;
}
而且$user->login();
如下:
public function login()
{
$hash = $this->pass->hashFromDatabase($this->username);
$test = $this->pass->verify($this->password, $hash);
if($test)
{
return "YES";
}
return "NO";
}
$this->pass
是从__construct:
public function __construct()
{
$database = new Database;
$password = new Password;
$this->mysqli = $database;
$this->pass = $password;
}
现在,我的主要问题。我知道我的一些方法现在可能不是最好的,但这不是我所关注的。为了OO的利益,我想知道在哪里放置哪些方法。我应该简单地把所有的数据库相关的东西放在我的Database.php
?或者我应该将hashFromDatabase
方法放入我的Password.php
?或者它可以简单地做到两个?
我应该使用我在顶部指定的三个类吗?或者我应该简单地使用Auth
类而不是User
和Password
?或者这只是一个品味问题?
当然,如果你要回答,请解释为什么:)非常感谢您的任何建议!
感谢方法,其实我已经得到了很多与Laravel经验,但我仍然很难理解把哈哈放在哪里。为了更好地理解它,我开始从头开始写一些东西,但我不想去分层应用程序,至少不是。但我想我会用我的经验来弄清楚这一点,并试图更清楚地理解它。谢谢 :) – Hardist