4

我正在开发 PHP 中的登录类。我在类定义中有以下行:

private $salty = sha1('salty');

...这给了我以下错误:

“解析错误:解析错误,','' or在第 26 行的 C:\xampp\htdocs\test\includes\jaLogin.php 中需要 ';''”

我已经尝试在类定义之外使用这条线并且它工作正常,只有当我在类定义中使用它时才会遇到问题。

如果我删除“私人”这个词,我会得到一个稍微不同的错误:

解析错误:解析错误,在第 26 行的 C:\xampp\htdocs\test\includes\jaLogin.php 中期待 `T_FUNCTION'

我觉得我错过了一些明显的东西......

4

3 回答 3

8

您不能使用函数调用来初始化类成员变量。

class YourClass
{
    private $salty;

    public function __construct()
    {
        $this->salty = sha1('salty');
    }
}

是初始化变量的一种方法。

编辑

甚至,例如,两个常量字符串的简单串联也是不允许的 ( protected $_string = 'Hello ' . 'World!';)。类属性的评估发生在编译时,因此使用依赖于运行时信息的构造是非法的。

[...]这个声明可能包括一个初始化,但是这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。

属性

于 2009-11-18T12:13:26.403 回答
1

只需将变量声明为 null,然后在构造函数中对其进行初始化。

private $salty = null

function __construct() {
    $this->salty = sha1('salty');
}
于 2009-11-18T12:16:41.647 回答
0

$sha1() 不起作用,因为您试图将函数作为变量处理。

当您正在研究更好的登录机制时,为什么不开始使用:

$this->salty = hash("SHA512", "salty");

此外,您可以创建一个盐哈希并将其与您的密码一起添加。这种添加会给您带来一点开销,因为您也必须将盐保存在数据库表中,并在验证(用户)凭证时检索和组合它。

希望对你有帮助!

于 2009-11-18T12:24:07.207 回答