Чтобы повторить то, что я предложил в комментариях (варианты 1 и 3 ниже):
Пространство имен вашего файла, хотя оно явно не написано в вашем сообщении:
App\Controller
без указания use
, new Binance\API(...)
интерпретируется как:
App\Controller\Binance\API
, который является объединением App\Controller
(ваше пространство имен) и Binance\API
(используемое имя класса).
это, конечно, не то, что вы хотите использовать, так как это то, что вы пытались включить из пакета binance Это также объясняет сообщение об ошибке
Попытка загрузить класс API
из пространства имен App\Controller\Binance
. Вы забыли оператор use
для другого пространства имен?
что именно и пошло не так. PHP пытался загрузить App\Controller\Binance\API
, который является классом API
из пространства имен App\Controller\Binance
.
Теперь есть несколько способов исправить это:
- добавьте
use Binance;
в заголовок вашего файла, тогда вы можете использовать new Binance\API(...)
- добавьте
use Binance\API;
в заголовок вашего файла, тогда вы можете использовать new API(...)
- не добавляйте оператор
use
, тогда вы можете использовать new \Binance\APi(...)
- добавьте
use Binance as Something;
в заголовок вашего файла, затем вы можете использовать new Something\API(...);
(псевдоним родительского пространства имен Binance
, так как Something
может разрешать конфликты имен)
- добавьте
use Binance\API as BinanceApi;
в заголовок вашего файла, тогда вы можете использовать new BinanceApi(...);
Вы решили использовать опцию 1. Что предпочтительнее, если класс (API
в этом случае) сам по себе не очень выразителен или уникален - так же как и вариант 5. Однако, если вы используете больше классов из Binance
пространство имен, предпочтительнее вариант 1.
Вариант 3 будет всегда работать (и может показаться предпочтительным, если какой-либо из других вариантов по какой-то причине кажется чрезмерным) - вы можете вообще обойтись без какого-либо оператора use
, но он может получить разочарование читать и писать.
В целом, все варианты жизнеспособны, и какой вкус выбрать. Смешивание этих вариантов может привести к путанице. Внутри Symfony я в основном видел вариант 2 со случайным псевдонимом (use ... as ...;
), особенно при использовании аннотаций DoctrineORM или при расширении некоторого класса с тем же именем класса, но в другом пространстве имен:
namespace [package1];
use [package2]\[ClassName] as Base[ClassName];
class [ClassName] extends Base[ClassName] { ... }
Надеюсь, это объяснение поможет. Документы php для пространств имен на самом деле полезны, когда вы понимаете основную концепцию пространств имен.