Php Can';在类定义中不使用sha1?

Php Can';在类定义中不使用sha1?,php,sha1,Php,Sha1,我正在用PHP开发一个登录类。在类定义中有以下行: private $salty = sha1('salty'); …这给了我以下错误: 解析错误:解析错误,应为C:\xampp\htdocs\test\includes\jaLogin.php中的第26行上的“”、”或“”;” 我曾尝试在类定义之外使用这一行,但效果很好,只有在类定义内部使用这一行时,我才会遇到问题 如果删除“private”一词,则会出现一个稍有不同的错误: 解析错误:解析错误,在第26行的C:\xampp\htdocs\t

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

private $salty = sha1('salty');
…这给了我以下错误:

解析错误:解析错误,应为C:\xampp\htdocs\test\includes\jaLogin.php中的第26行上的“
”、”或“
”;”

我曾尝试在类定义之外使用这一行,但效果很好,只有在类定义内部使用这一行时,我才会遇到问题

如果删除“private”一词,则会出现一个稍有不同的错误:

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


我觉得我缺少了一些明显的东西…

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

class YourClass
{
    private $salty;

    public function __construct()
    {
        $this->salty = sha1('salty');
    }
}
是初始化变量的唯一方法

编辑

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

[……]本声明可包括: 初始化,但是这个 初始化必须是常量 值——也就是说,它必须能够 在编译时计算,并且不能 依赖于中的运行时信息 要评估的订单


()

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

private $salty = null

function __construct() {
    $this->salty = sha1('salty');
}
$sha1()无法运行,因为您试图将函数作为变量处理

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

$this->salty = hash("SHA512", "salty");
此外,您还可以创建一个salt散列并将其与您的密码一起添加。这个添加给您带来了一点开销,因为您还必须将salt保存在db表中,并在验证(用户)凭据时检索和合并它


希望它能帮助你

宾果!没错!谢谢你。知道为什么吗?因为你的类只是一个数据结构。您总是需要调用函数来将它们设置为某些值。在您的例子中,它是构造函数。添加了一些解释。实际上,这是一个在执行过程中何时计算成员变量的问题。这很有意义。谢谢