4

PHP で特定のクラスを実装する際に問題が発生しています。Zend Framework アプリケーションで Anthony Ferrara の RandomLib ライブラリを使用したいと考えています (ここで見つけることができます)。

私はここ数年、PHP でプログラミングを行ってきたので、ほとんどの場合、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 を application_name/libs/RandomLibFactory.php に RandomLibFactory クラスとして配置するとすると、次のようになります。

public static function generateToken() {
    $factory = $locator = new RandomLibFactory();
    $generator = $factory->getMediumStrengthGenerator();
    return $generator->generate(16); }
于 2013-06-12T21:33:34.303 に答える
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 に答える