[英]The usage of classes and OOP in PhP
我在php中的OOP遇到了一些问题,因为这是我第一次使用它。 我试图编写自己的不带框架的身份验证系统,只是为了不理解注册/登录/注销系统的基础。 所以到目前为止,我已经做到了,连接文件connect.php:
<?php
class Dbconnect {
private $servername;
private $username;
private $password;
private $dbname;
protected function connect() {
$this->servername = "localhost";
$this->username = "root";
$this->password = "root";
$this->dbname = "example";
$conn = new mysqli($this->servername,$this->username,$this->password,$this->dbname);
return $conn;
}
}
看起来不错吧? 但是现在我不明白我的register.php文件应该是什么样子,我已经编写了一个程序版本,并且不知道如何将其修改为OOP:
<?php
include 'connect.php';
$Err = $emailErr = $usernameErr = "";
//registration
if(isset($_POST['register'])) {
$username = mysqli_real_escape_string($conn,$_POST['username']);
$email = mysqli_real_escape_string($conn,$_POST['email']);
$password = mysqli_real_escape_string($conn,$_POST['password']);
if(empty($username) || empty($email) || empty($password)) {
$Err = "Empty field(s)";
}
if(!preg_match("/^[a-zA-z ]+$/", $username)){
$usernameErr = "Use letters for user";
} elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Wrong email format";
}
}
if ($Err == "" && $emailErr == "" && $usernameErr == "") {
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$sql = "INSERT INTO users (username, email, password)
VALUES('$username','$email','$hashed_password')";
$result = $conn->query($sql);
if($result) {
header('location: http://' . $_SERVER['HTTP_HOST'] . '/test/success.php');
exit();
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}
?>
有人可以解释一下我该如何修改此文件。谢谢。
我的其他人与众不同,但这是我的处理方式: 从上至下构建它 。
因此,首先要为代码任务编写高级逻辑,以使您的代码得以实现:
$connection = new MySQLi('localhost', 'root', 'password', 'example');
$authenticator = new Authenticator($connection);
$activity = $_POST['action'] ?? 'default';
if ('register' === $activity) {
$user = $authenticator->register($_POST['name'], $_POST['pass']);
}
if ('login' === $activity) {
if ($authenticator->login($_POST['name'], $_POST['pass'])) {
echo 'On';
}
}
定义了顶层方法后,您将更进一步,将进入下一层(可以是一个或多个类)。
class Authenticator
{
private $connection;
public function __construct($connection) {
$this->connection = $connection;
}
public function register($username, $password) {
$user = new User($username);
$user->setPassword($password);
$user->save($this->connection);
return $user;
}
public function login($username, $password) {
$user = new User($username);
$user->load($this->connection);
return $user->isMatchingPassword($password)
}
}
此时,您可以开始查看必须填写的代码的其他部分。 在这种情况下,还需要根据本示例中的代码,至少使用已经提到的方法来实现User
类。
在每一步中,您都可以解决一个特定范围的问题,这样一来,即使在进行非常复杂的项目时,也不会感到不知所措。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.