比方說,我有三大類: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