Php 正在尝试使用composer向Symfony添加库
我正在尝试使用composer将以下库()添加到我的Symfony项目中 我跑了 编写器需要jaggedsoft/php二进制api 没有问题,但我在加载页面时遇到以下错误 试图从命名空间“App\Controller\Binance”加载类“API”。 您是否忘记了另一个名称空间的“use”语句Php 正在尝试使用composer向Symfony添加库,php,symfony,Php,Symfony,我正在尝试使用composer将以下库()添加到我的Symfony项目中 我跑了 编写器需要jaggedsoft/php二进制api 没有问题,但我在加载页面时遇到以下错误 试图从命名空间“App\Controller\Binance”加载类“API”。 您是否忘记了另一个名称空间的“use”语句 公共功能索引(){ 需要“../vendor/autoload.php”; $api=newbinance\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作为BinanceApi在您的文件头中,然后您可以使用newbinanceapi(…)代码>
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] { ... }