Php 正在尝试使用composer向Symfony添加库

Php 正在尝试使用composer向Symfony添加库,php,symfony,Php,Symfony,我正在尝试使用composer将以下库()添加到我的Symfony项目中 我跑了 编写器需要jaggedsoft/php二进制api 没有问题,但我在加载页面时遇到以下错误 试图从命名空间“App\Controller\Binance”加载类“API”。 您是否忘记了另一个名称空间的“use”语句 公共功能索引(){ 需要“../vendor/autoload.php”; $api=newbinance\api(“,”); } 现在我猜我需要添加一个use语句,但我有点被困在我需要添加的内容上

我正在尝试使用composer将以下库()添加到我的Symfony项目中

我跑了

编写器需要jaggedsoft/php二进制api

没有问题,但我在加载页面时遇到以下错误

试图从命名空间“App\Controller\Binance”加载类“API”。 您是否忘记了另一个名称空间的“use”语句

公共功能索引(){
需要“../vendor/autoload.php”;
$api=newbinance\api(“,”);
}

现在我猜我需要添加一个use语句,但我有点被困在我需要添加的内容上。

重申我在评论中的建议(下面的选项1和3):

文件的命名空间(虽然未在帖子中明确写入)为:

App\Controller
在没有任何
use
语句的情况下,
newbinance\API(…)
被解释为:

App\Controller\Binance\API
这是
App\Controller
(您的命名空间)和
Binance\API
(使用的类名)的串联

这当然不是您想要使用的,因为这是您试图从binance包中包括的内容。这也解释了错误消息

试图从命名空间
App\Controller\Binance
加载类
API
。您是否忘记了另一个命名空间的
use
语句

这正是问题所在。PHP试图从名称空间
App\Controller\Binance
加载
App\Controller\Binance\API
API

现在有几种不同的方法来解决此问题:

  • 添加
    使用二进制newbinance\API(…)
  • 添加
    使用Binance\API新API(…)
  • 不要添加
    use
    语句,然后可以使用
    new\Binance\APi(…)
  • 添加
    将二进制作为某种东西使用newsomething\API(…)
    (将父名称空间的
    二进制
    别名为
    某物
    可能会解决名称冲突)
  • 添加
    使用Binance\API作为BinanceApinewbinanceapi(…)
  • 您决定使用选项1。如果类(
    API
    ,在本例中)本身不是很有表现力或唯一性,那么哪一个更可取?选项5也是如此。但是,如果您使用了更多来自
    Binance
    名称空间的类,则选项1更可取

    选项3总是有效的(如果其他任何选项由于某种原因显得过于苛刻,那么它可能看起来更可取)——实际上,您可以不使用任何
    use
    语句,但读写起来可能会令人沮丧

    总的来说,所有的选择都是可行的,它决定了使用哪一种。混合这些选项可能会导致混乱。在Symfony内部,我主要看到选项2偶尔使用别名(
    使用…作为…;
    ),特别是在使用DoctrineORM注释或扩展具有相同类名但位于不同命名空间的某个类时:

    namespace [package1];
    
    use [package2]\[ClassName] as Base[ClassName];
    
    class [ClassName] extends Base[ClassName] { ... }
    

    我希望这个解释有帮助。当您理解名称空间的核心概念时,名称空间的php文档实际上很有帮助。

    您可以使用\so
    new\Binance\Api
    作为前缀,或者使用php建议的use语句^^^^^^显然,在名称空间之后添加一个
    use Binance
    就足够了。如果我添加“use App\Controller\Binance;”我仍然收到相同的错误消息,重点是,您的文件具有名称空间
    App\Controller
    ,因此所有未定义的内容都假定位于该名称空间中<例如,code>Binance\API
    。require vendor/autoload语句位于加载的第一个文件的最顶部。您不会将其放入方法调用中。与名称空间或use语句无关。@Cerad,我已经检查了index.php文件,它已经包含一个require DIR。“/../vendor/autoload.php”;所以我已经删除了这一行,但我仍然试图从名称空间“App\Controller\Binance”加载类“API”。您忘记了另一个名称空间的“use”语句了吗?谢谢您的解释,这很有帮助
    namespace [package1];
    
    use [package2]\[ClassName] as Base[ClassName];
    
    class [ClassName] extends Base[ClassName] { ... }