Конфликт пространства имен при использовании сторонних API в классе - PullRequest
0 голосов
/ 04 октября 2019

Происходит что-то странное. Я новичок в отношении программирования PHP. Я пытаюсь использовать FirePHP, но мой вопрос на самом деле не связан с этим инструментом напрямую.

Функция fb, которую вы увидите ниже, является частью FirePHP. Моя точка входа - Main.php. Первый вызов fb выполняется без проблем, но второй вызов (см. ExperController.php), который запускается при вызове $ec->exper(); в Main.php, вызывает фатальную ошибку:

Неустранимая ошибка: необработанная ошибка: класс 'App \ Controllers \ FirePHP' не найден в пути к каталогу wp-каталога \ wp-content \ mu-plugins \ typerocket \ app \ Controllers \ ExperController.php в строке 12

Почему движок времени ищет класс FirePHP в этом пространстве имен (App \ Controllers)? И почему это не было проблемой во время первого fb вызова? В файлах FirePHP вообще не определено пространство имен. И последний, но важный вопрос, как я могу это исправить, не трогая сторонние файлы? Этот ответ не является решением для моего случая, поскольку я не ссылаюсь на упомянутый класс в своем коде!

Примечание: FirePHP включен через автозагрузчик (предоставляется композитором).

Main.php:

<?php

fb('Hello World!', FirePHP::INFO);

$req = new \TypeRocket\Http\Request();
$res = new \TypeRocket\Http\Response();
$ec = new \App\Controllers\ExperController($req, $res);
$ec->exper();

ExperController.php :

<?php

namespace App\Controllers;


use TypeRocket\Controllers\Controller;

class ExperController extends Controller
{

    public function exper() {
        fb('Hello World!', FirePHP::INFO);
    }

}

1 Ответ

2 голосов
/ 04 октября 2019

Вы используете какой-нибудь менеджер зависимостей, например, композитор? когда вы вызываете его из main, php может увидеть, где находится класс FirePHP, и все работает нормально, но когда вы пытаетесь получить к нему доступ внутри класса в другой папке, вы должны определить, где находится класс внутри вашего контроллера, например, как вы определили, где находится контроллеркласс, который вы расширяете:

use TypeRocket\Controllers\Controller;

, поэтому добавьте класс FirePHP к контроллеру, и тогда все будет хорошо.

use Path\To\Class\FirePHP;

также, если вы все сделали и все еще не работаете, вы можете попробовать dumpавтозагрузка;

composer dump-autoload
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...