Класс не найден с PSR-0


Я полностью застрял в этом вопросе! Я использую php-простой-html-dom-анализатор, и он загружен с PSR-0. Я не настолько хорошо знаком с PSR-0. Но я использую класс так же, как показано в файле readme, но я не могу заставить его работать.

В моей IDE автозаполнение работает нормально, и никаких ошибок не отображается. Но когда я запускаю скрипт, я получаю следующую ошибку:

Неустранимая ошибка: класс 'Sunra\phpsimple\htmldomparser' не найден в C:\xampp\htdocs\folder\test.php в режиме онлайн 3

Код:

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

Структура файла:

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

Как я уже сказал, я действительно понятия не имею, что происходит не так. Так что, вероятно, я ищу не то, что нужно, и именно поэтому я публикую этот вопрос.

 3
Author: halfer, 2014-05-15

3 answers

Скачать Композитор

В каталоге вашего проекта выполните:

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 для своих зависимостей. Однако это все еще полностью выполнимо для небольших проектов даже из одного файла.

 3
Author: Flosculus, 2014-05-15 08:56:20

Ну, вы не используете загрузчик, таким образом, класс не будет загружен автоматически.

Вот минимальный пример автозапуска который использует PSR-0.


После того, как вы поймете, что такое автозагрузка, вам следует попробовать использовать фреймворки управления зависимостями, такие как Composer. Видишь Флоскулус ответьте для получения более подробной информации.

 2
Author: Madara Uchiha, 2017-05-23 11:53:44

Используя автозагрузчик PSR-0, вы добавили его в реестр spl_autoload_register ("автозагрузка") или используете автозагрузчик composer и включенных композиторов?

Это работает для меня:

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

 -1
Author: viion, 2014-05-15 09:00:11