PSR-0找不到的班级

时间:2014-05-15 08:45:37

标签: php psr-0

我完全坚持这个问题!我正在使用php-simple-html-dom-parser并且它加载了PSR-0。我对PSR-0并不熟悉。但我正如自述文件所示使用该类,但我无法使其正常工作。

在我的IDE中,autcompletion工作正常,没有显示任何错误。但是当我运行脚本时,我收到了这个错误:

  

致命错误:第3行的C:\ xampp \ htdocs \ folder \ test.php中找不到类'Sunra \ PhpSimple \ HtmlDomParser'

代码:

<?php
use Sunra\PhpSimple\HtmlDomParser;
$dom = HtmlDomParser::file_get_html();

文件结构:

folder\
  Sunra\
    PhpSimple\
      simplehtmldom_1_5\
      HtmlDomParser.php
test.php

正如我所说,我真的不知道出了什么问题。所以我可能正在寻找错误的东西,这就是我发布这个问题的原因。

3 个答案:

答案 0 :(得分:5)

下载Composer

在项目目录中运行:

php composer.phar require sunra/php-simple-html-dom-parser ~1.5

在你的php文件中(例如index.php),添加:

<?php

include 'vendor/autoload.php';

use Sunra\PhpSimple\HtmlDomParser;

$dom = HtmlDomParser::file_get_html();

此处,当您包含vendor/autoload.php时,作曲家生成的自动加载配置会为您处理所有类自动加载。几乎所有跟随PSR-0的github上的库都存在于Packagist上,使得它们可以通过这种方式安装。

您可能需要阅读Semantic Versioning以了解在需要库时要安装的内容。

现在大多数现代PHP框架都使用Composer来实现它们的依赖关系。但是,即使是单个文件的小项目,它仍然完全可行。

答案 1 :(得分:2)

嗯,您没有使用 autoloader ,因此系统不会自动加载。

这是使用PSR-0的最小 autoloader example


了解自动加载后,您应该尝试使用依赖管理框架,例如 Composer 。有关详细信息,请参阅 Flosculus's 答案。

答案 2 :(得分:-1)

使用PSR-0自动加载器,您是否将它添加到spl_autoload_register('autoload'),或者您使用的是作曲家和包含的作曲家自动加载器?

这对我有用:

<?php
function autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

    require $fileName;
}
spl_autoload_register('autoload');

use Sunra\PhpSimple\HtmlDomParser;

$dom = HtmlDomParser::file_get_html('http://google.com');
var_dump($dom);
?>

来源:http://www.php-fig.org/psr/psr-0/