PHP学生在这里考虑以下2种方法,1方法检查用户是否存在其他注册用户。
public function is_registered($userEmail)
{
$this->email = $userEmail;
$sql = "SELECT * from users WHERE email = :email";
$stmnt = $db->prepare($sql);
$stmnt->bindValue(':email', $userEmail);
$check = $stmnt->execute();
if($check >= 1) {
return true;
}
else {
return false;
}
}
public function register_user($email, $pword, $firstname, $lastname)
{
$this->email = $email;
//call method is_registered inside register user class
$registered = $this->is_registered($email);
if($registered == true){
die("USER EXISTS");
}
else {
//continue registration
}
}
虽然这可能不是最好的用例,但我基本上想知道:
get_email()
方法或类似方法中调用login()
方法,您需要一个电子邮件地址。具有set属性的方法
public function is_registered($userEmail)
{
$this->email = userEmail // SET PROPERTY
$sql = "SELECT * from users WHERE email = :email";
$stmnt = $db->prepare($sql);
$stmnt->bindValue(':email', $userEmail);
}
没有设置属性的方法。
public function is_registered($userEmail)
{
//NO SET PROPERTY
$sql = "SELECT * from users WHERE email = :email";
$stmnt = $db->prepare($sql);
$stmnt->bindValue(':email', $userEmail);
}
希望这是有道理的,任何帮助或指导非常感谢。
从OOP
的角度来看,这两种方法都有点奇怪。由于你的User
类似乎不是静态的,并且因为电子邮件地址是认证的主要唯一性判别之一,所以你的类应该用一个永远不会改变的valorized email
属性来实例化...或者在数据库提取时( 1)或填写表格(2):
$user = new User(..., $auth->email); (1)
$user = new User(..., $_POST['registration_mail']); (2)
最重要的是,一个名为is_registered
的方法应该不会搞乱分配。它应该做的就是检查数据库中是否定义了当前的User
实例类。
在你的第一种方法中,风险是弄乱一切。假设您有以下用户:
$user = new User('John', '[email protected]');
现在,让我们看看当你错误地将错误的电子邮件作为参数传递时会发生什么:
$result = $user->is_registered('[email protected]');
echo $user->name; // John
echo $user->email // [email protected]
在你的第二种方法中,你不应该允许is_registered
接受任何论证,因为正如我之前解释过的那样,应该在创建时定义属性以避免致命错误。让我们带回我们在第一个例子中使用的相同用户:
$user = new User('John', '[email protected]');
现在,让我们看看当错误地传递错误的电子邮件作为参数时会发生什么([email protected]
已注册,[email protected]
不是):
$result = $user->is_registered('[email protected]'); // false
所以我的建议是,在创建实例时初始化属性,永远不要搞乱它。或者,您可以将静态函数实现到实用程序类中,对于给定的电子邮件,该实用程序类执行所需的检查。但是尽量让你的OOP
设计尽可能严格。