这里的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);
}
希望这是有道理的,任何帮助或指导都非常感激。
答案 0 :(得分:1)
从for(int i = 0;i < arr[node].size();i++){
的观点来看,这两种方法都有点奇怪。由于您的OOP
类似乎不是静态的,并且由于电子邮件地址是身份验证的主要唯一性判别之一,因此您的类应该使用永不更改的增值User
属性进行实例化...在数据库提取(1)或表单填写(2)时:
email
最重要的是,一个名为$user = new User(..., $auth->email); (1)
$user = new User(..., $_POST['registration_mail']); (2)
的方法应该不会弄乱任务。它应该做的就是检查数据库中是否定义了当前的is_registered
实例类。
在你的第一种方法中,风险就是弄乱一切。假设您有以下用户:
User
现在,让我们看看当你错误地将错误的电子邮件作为参数传递时会发生什么:
$user = new User('John', 'john@domain.com');
在你的第二种方法中,你不应该允许$result = $user->is_registered('marley@domain.com');
echo $user->name; // John
echo $user->email // marley@domain.com
接受任何论证,因为正如我之前解释的那样,应该在创建时定义属性以避免致命错误。让我们带回我们在第一个例子中使用的相同用户:
is_registered
现在,让我们看看当错误地传递错误的电子邮件作为参数($user = new User('John', 'john@domain.com');
已注册,john@domain.com
不是)时会发生什么:
marley@domain.com
所以我的建议是,在创建实例时初始化属性,永远不要搞乱它。或者,您可以将静态函数实现到实用程序类中,对于给定的电子邮件,该实用程序类执行所需的检查。但请尽量使$result = $user->is_registered('marley@domain.com'); // false
设计尽可能严格。