Попытка добавить библиотеку в Symfony с помощью composer - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь добавить следующую библиотеку ( ссылка ) в мой проект Symfony с помощью composer.

Я пробежал

композитор требует jaggedsoft / php-binance-api

без проблем, но я получаю следующую ошибку при загрузке страницы.

Попытка загрузить класс "API" из пространства имен "App \ Controller \ Binance". Вы забыли оператор use для другого пространства имен?

public function index(){
   require '../vendor/autoload.php';
   $api = new Binance\API("<api key>","<secret>");
}

Теперь я предполагаю, что мне нужно добавить оператор использования, но я немного застрял в том, что мне нужно добавить.

1 Ответ

0 голосов
/ 06 мая 2018

Чтобы повторить то, что я предложил в комментариях (варианты 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.

Теперь есть несколько способов исправить это:

  1. добавьте use Binance; в заголовок вашего файла, тогда вы можете использовать new Binance\API(...)
  2. добавьте use Binance\API; в заголовок вашего файла, тогда вы можете использовать new API(...)
  3. не добавляйте оператор use, тогда вы можете использовать new \Binance\APi(...)
  4. добавьте use Binance as Something; в заголовок вашего файла, затем вы можете использовать new Something\API(...); (псевдоним родительского пространства имен Binance, так как Something может разрешать конфликты имен)
  5. добавьте 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 для пространств имен на самом деле полезны, когда вы понимаете основную концепцию пространств имен.

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