你好,我只是坚持语法,任何人都可以帮助我使用下一个代码吗?
class User {
protected $userID = preg_replace('#[^0-9]#i', '', $_SESSION['user_id']);
protected $useremail = preg_replace('#[^A-Za-z0-9@_.-]#i', '', $_SESSION['user']);
protected $userPassword = preg_replace('#[^A-Za-z0-9]#i', '', $_SESSION['user_password']);
public function CheckUserLogin(){
if(!isset($_SESSION['user'])){
header("location: login.php");
exit();
}
//Try to find user from session data in database
$sql = "SELECT * FROM users WHERE id = '$this->userID' AND email = '$this->useremail' AND password = '$this->userPassword' LIMIT 1";
$res = mysql_query($sql) or die(mysql_error());
$userMatch = mysql_numrows($res);
if ($userMatch == 0) {
header("location: login.php");
exit();
}
}
}
答案 0 :(得分:4)
首先,请注意,在声明属性时,不能为其分配一个在编译时不知道的值 - 这意味着您无法调用函数来初始化属性。
此代码:
protected $userID = preg_replace('#[^0-9]#i', '', $_SESSION['user_id']);
无效。
作为参考,您可以阅读手册的Properties页面(引用相关句子):
使用其中一个关键字
public
,protected
定义它们, 或private
,然后是正常的变量声明。
这 声明可能包括初始化,但此初始化 必须是一个恒定值 - 也就是说,它必须能够被评估 在编译时,不得依赖于运行时信息 待评估。
您应首先申报该财产;并且,稍后(例如,在您班级的constructor中),初始化它:
class User {
protected $userID;
public function __construc() {
$this->userID = preg_replace('#[^0-9]#i', '', $_SESSION['user_id']);
}
}
答案 1 :(得分:1)
简而言之:您只能为类声明中的属性指定常量表达式(在类体内,但在方法之外)。其他所有内容(变量,函数调用,......)仅限于代码块(主,函数和方法)。
然而,你的代码以你展示它的方式是非常神奇的,在任何情况下都应该避免。请改用构造函数
class User {
protected $userID;
protected $useremail;
protected $userPassword;
public function __construct ($userId, $user, $password) {
$this->userID = preg_replace('#[^0-9]#i', '', $userId);
$this->useremail = preg_replace('#[^A-Za-z0-9@_.-]#i', '', $user);
$this->userPassword = preg_replace('#[^A-Za-z0-9]#i', '', $password);
}
// ..
}