Класс не найден с PSR-0
Я полностью застрял в этом вопросе! Я использую https://github.com/sunra/php-simple-html-dom-parser, и он загружен 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 ответа
Скачать 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
сгенерированная компоновщиком конфигурация автозагрузки обрабатывает все автозагрузки классов за вас. Почти все библиотеки на github, которые следуют PSR-0, существуют на Packagist, что делает их доступными для установки таким способом.
Возможно, вы захотите ознакомиться с Semantic Versioning, чтобы получить представление о том, что вы устанавливаете, когда вам нужны библиотеки.
Большинство современных PHP-фреймворков теперь используют Composer для своих зависимостей. Однако это все еще полностью возможно для небольших проектов даже одного файла.
Ну, вы не используете автозагрузчик, поэтому класс не будет загружен автоматически.
Вот минимальный пример автозагрузчика, который использует PSR-0.
После того, как вы поймете автозагрузку, вы должны попытаться использовать инфраструктуры управления зависимостями, такие как Composer. Смотрите ответ Flosculus для более подробной информации.
Используя автозагрузчик 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/