4

我在 PHP 中实现特定类时遇到问题。我想在我的 Zend Framework 应用程序中使用 Anthony Ferrara 的 RandomLib 库(你可以在这里找到它。)

我已经用 PHP 编程几年了,所以我大部分时间都知道我的方法。但我不得不承认,在使用实现命名空间的类时,我有点不知所措。这是我的代码中的内容:

public static function generateToken()
{
    require_once 'RandomLib/Factory.php';
    $factory = new \RandomLib\Factory;
    $generator = $factory->getMediumStrengthGenerator();
    return $generator->generate(16);
}

不幸的是,我收到以下错误:

Fatal error: Class 'SecurityLib\AbstractFactory' not found in C:\xampp\php\includes\RandomLib\Factory.php on line 30

就像我说的,我真的不知道这里发生了什么。我不知道我是否应该在课堂上使用某种 use 语句。

4

3 回答 3

1

使用 ZF 1.* 的自动加载器,假设您将 factoru 作为 RandomLibFactory 类放入 application_name/libs/RandomLibFactory.php,它应该如下所示:

public static function generateToken() {
    $factory = $locator = new RandomLibFactory();
    $generator = $factory->getMediumStrengthGenerator();
    return $generator->generate(16); }
于 2013-06-12T21:33:34.303 回答
0

在我找到适用于我的 Windows 机器的解决方案之前,我也扯了很多头发。

  1. 我下载了 Windows 版本的Composer(我几乎没有听说过,更不用说使用了)。
  2. 我用它来安装 RandomLib(如说明的安装部分所示 - 在 Windows 中使用命令框)
  3. 这会生成一个供应商文件夹,其中包含一个 composer 文件夹、一个 ircmaxell 文件夹和一个 autoload.php 文件;这些我上传到我网站的合适位置供应商目录包括 random-lib 和 - required - security-lib 库。
  4. 在我想生成随机文本的程序中,我包含了 autoload.php(前面是合适的目录指针)
  5. 然后我很高兴去创建一个工厂,生成器和字符串,如库的说明中所示
于 2017-10-03T11:44:53.443 回答
0

对于那些花了很多时间却没有找到线索,把头发扯断,撞到墙上致死的人:

  • 您需要在文件夹“test/”中的“bootstrap.php”中拥有一个自动加载器,以管理每个命名空间......或者您需要链接文件夹中的每个文件,这不是很聪明。见spl_autoload_registerphp.net
  • 你刚刚下载了 RandomLib,它依赖于另一个库(作者没有提到它):所以你需要SecurityLib(它具有相同的文件夹结构:将“lib/”中的内容复制到另一个“lib/”文件夹中。

从根文件夹“RandomLib-1.1.0/”调用脚本的自动加载器示例(参见'lib'$path):

spl_autoload_register(function ($class) {
    $nslen = strlen(__NAMESPACE__);
    if (substr($class, 0, $nslen) != __NAMESPACE__) {
        //Only autoload libraries from this package
        return;
    }
    $path = substr(str_replace('\\', '/', $class), $nslen);
    $path = __DIR__ . '/lib/' . $path . '.php';
    if (file_exists($path)) {
        require_once $path;
    }
});

现在您已设置好并且可以自由使用类,而不必担心包含或需要文件。

$factory = new RandomLib\Factory;

$generator = $factory->getLowStrengthGenerator();
//$generator = $factory->getMediumStrengthGenerator();
//$generator = $factory->getHighStrengthGenerator();

$randomStringLength = 16;
$randomStringAlphabet = '0123456789@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/';
$randomString = '';

for ($i=0;$i<10;$i++){
    $randomString = $generator->generateString( $randomStringLength , $randomStringAlphabet);
    echo $randomString.'<br>';
}
于 2016-07-13T17:36:39.003 回答