我正在使用PHP登录类。我在类定义中有以下行:
private $salty = sha1('salty');
...这给了我以下错误:
“解析错误:解析错误,期待','' or
';''在C:\ xampp \ htdocs \ test \ includes \ jaLogin.php第26行”
我尝试在类定义之外使用这一行并且它工作正常,只有当我在类定义中使用它时才会出现问题。
如果我删除“私人”一词,我会收到一个稍微不同的错误:
解析错误:解析错误,期望第26行的C:\ xampp \ htdocs \ test \ includes \ jaLogin.php中的“T_FUNCTION”
我觉得我错过了一些明显的东西......
答案 0 :(得分:8)
您不能使用函数调用来初始化类成员变量。
class YourClass
{
private $salty;
public function __construct()
{
$this->salty = sha1('salty');
}
}
是初始化变量的一种方法。
修改强>
甚至,例如,不允许两个常量字符串的简单连接(protected $_string = 'Hello ' . 'World!';
)。类属性的评估发生在编译时,因此依赖于运行时信息的构造的使用是非法的。
[...]此声明可能包括 初始化,但是这个 初始化必须是常量 价值 - 也就是说,它必须能够 在编译时评估,但不得 依赖于运行时信息 为了评估。
答案 1 :(得分:1)
只需将变量声明为null,然后在构造函数中初始化它。
private $salty = null
function __construct() {
$this->salty = sha1('salty');
}
答案 2 :(得分:0)
$ sha1()将无法运行,因为您正在尝试将函数作为变量处理。
当您正在开发更好的登录机制时,为什么不开始使用:
$this->salty = hash("SHA512", "salty");
此外,您可以创建一个salt哈希并使用您的密码添加它。这种添加会给您带来一点开销,因为您必须将salt保存在db-table中并进行检索并在验证(用户)凭据时将其合并。
希望它可以帮到你!