代码之家  ›  专栏  ›  技术社区  ›  Mr_Chimp

不能在类定义内使用sha1?

  •  4
  • Mr_Chimp  · 技术社区  · 15 年前

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

    private $salty = sha1('salty');
    

    …这给了我以下错误:

    “分析错误:分析错误,应为 ','' or C:\xampp\htdocs\test\includes\jalogin.php第26行中的“;”

    我试过在类定义之外使用这一行,它工作得很好,只有当我在类定义内使用它时,我才会遇到问题。

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

    分析错误:分析错误,第26行的C:\xampp\htdocs\test\includes\jalogin.php中应为“t\u function”

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

    3 回复  |  直到 14 年前
        1
  •  8
  •   Stefan Gehrig    15 年前

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

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

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

    编辑

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

    […]本声明可包括 初始化,但是 初始化必须是常量 价值——也就是说,它必须能够 在编译时评估,不能 取决于中的运行时信息 待评估订单。

    ( Properties )

        2
  •  1
  •   pablasso Jordan    14 年前

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

    private $salty = null
    
    function __construct() {
        $this->salty = sha1('salty');
    }
    
        3
  •  0
  •   Ben    15 年前

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

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

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

    另外,您可以创建一个盐散列并用密码添加它。这个添加给您带来了一些开销,因为您还必须将salt保存在一个db表中,并在验证(用户)凭据时检索和组合它。

    希望它能帮助你!