【问题标题】:Adding namespace to phpass (or any class)将命名空间添加到 phpass(或任何类)
【发布时间】:2014-02-23 13:38:31
【问题描述】:

我正在使用http://www.openwall.com/phpass/ 进行散列。我希望给它添加命名空间,并添加如下所示的单行。

<?php
namespace myNameSpace;  //I added this one line
class PasswordHash {
  //...
}
?>

然后我创建我的对象,但是,当我应用 HashPassword 方法时,结果完全不同。

require 'PasswordHash.php';
//$t_hasher = new PasswordHash(8, FALSE); //Original line
$t_hasher = new myNameSpace\PasswordHash(8, FALSE);

$correct = 'test12345';
$hash = $t_hasher->HashPassword($correct);

唯一的变化是我将命名空间添加到类的两行以及我是否启动了对象。

什么可能导致差异以及如何识别和修复它们?

【问题讨论】:

  • 请发布您的输出是什么,以及您期望它是什么。从您的问题中,我无法猜测“有什么区别”...因为您向我们提供的所有内容“结果完全不同”...
  • @Tularis。我可以并且会发布差异。为什么会有任何差异?什么可能导致基于命名空间的差异?
  • 好吧,你突然将你的类分配到不同的命名空间这一事实可能会导致一个类引用一个曾经在 no 命名空间内的函数的问题,现在是突然合二为一。这反过来又会导致它的功能不同。
  • @Tularis 它没有引用任何其他函数。我最终偶然发现了这个问题。需要注意的地方。感谢您的帮助。

标签: php oop namespaces phpass


【解决方案1】:

根据文档http://us2.php.net/__destruct

从 PHP 5.3.3 开始,与 a 的最后一个元素同名的方法 命名空间的类名将不再被视为构造函数。这个 更改不会影响非命名空间类。

phpass 使用与命名空间类的最后一个元素同名的构造函数。把名字改成__construct

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多