3

我完全被这个问题困住了!我正在使用php-simple-html-dom-parser,它加载了 PSR-0。我对 PSR-0 不是很熟悉。但是我就像自述文件显示的那样使用这个类,但我无法让它工作。

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

致命错误:在第 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

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

4

3 回答 3

4

下载作曲家

在您的项目目录中运行:

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作曲家时,生成的自动加载配置会为您处理所有类自动加载。GitHub 上几乎所有遵循 PSR-0 的库都存在于Packagist上,因此可以通过这种方式进行安装。

您可能需要阅读语义版本控制,以了解在需要库时要安装什么。

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

于 2014-05-15T08:56:20.017 回答
2

好吧,您没有使用autoloader,因此不会自动加载该类。

这是一个使用 PSR-0的最小自动加载器示例。


了解 Autoloading 后,您应该尝试使用Composer等依赖管理框架。有关更多详细信息,请参阅Flosculus 的答案。

于 2014-05-15T08:50:07.633 回答
-1

使用 PSR-0 自动加载器,您是否将其添加到 spl_autoload_register('autoload'),或者您使用的是 composer 并包含 composers 自动加载器?

这对我有用:

<?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/

于 2014-05-15T08:52:44.570 回答