我在PHP中实现特定的类时遇到了麻烦。我想在我的Zend Framework应用程序中使用Anthony Ferrara的RandomLib库(你可以找到它here。)
我已经用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
像我说的那样,我真的不知道这里发生了什么。我不知道我是否应该在课堂上使用某种使用陈述。
答案 0 :(得分: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); }
答案 1 :(得分:0)
对于那些花费大量时间而且没有找到线索的人来说,撕裂他的头发并将墙撞死:
spl_autoload_register
从根文件夹调用脚本的自动加载器示例" 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>';
}
答案 2 :(得分:0)
在找到Windows机器的解决方案之前,我也撕掉了很多头发。