在类定义中不能使用sha1?

时间:2009-11-18 12:11:52

标签: php sha1

我正在使用PHP登录类。我在类定义中有以下行:

private $salty = sha1('salty');

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

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

我尝试在类定义之外使用这一行并且它工作正常,只有当我在类定义中使用它时才会出现问题。

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

解析错误:解析错误,期望第26行的C:\ xampp \ htdocs \ test \ includes \ jaLogin.php中的“T_FUNCTION”

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

3 个答案:

答案 0 :(得分:8)

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

class YourClass
{
    private $salty;

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

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

修改

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

  

[...]此声明可能包括   初始化,但是这个   初始化必须是常量   价值 - 也就是说,它必须能够   在编译时评估,但不得   依赖于运行时信息   为了评估。

Properties

答案 1 :(得分:1)

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

private $salty = null

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

答案 2 :(得分:0)

$ sha1()将无法运行,因为您正在尝试将函数作为变量处理。

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

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

此外,您可以创建一个salt哈希并使用您的密码添加它。这种添加会给您带来一点开销,因为您必须将salt保存在db-table中并进行检索并在验证(用户)凭据时将其合并。

希望它可以帮到你!