在Yii2中使用没有名称空间的类

alw*_*arn 11 php namespaces 2checkout yii2 psr-4

我想将Checkout SDK与Yii2 一起使用,但由于该库不支持PSR-4标准(命名空间),因此无法集成它.如何将此库用于我的目的?

编辑

正如我所建议的那样,我试着用class作为

$sale = new \Twocheckout_Sale();
Run Code Online (Sandbox Code Playgroud)

但我仍然无法使其发挥作用.

aro*_*hev 9

当类没有名称空间时,它意味着它位于根名称空间中.

选项1:

use Twocheckout;

...

Twocheckout::format('json');
Run Code Online (Sandbox Code Playgroud)

选项2:

\Twocheckout::format('json');
Run Code Online (Sandbox Code Playgroud)

例如,PHPExcel扩展也没有名称空间,类似的问题在官方论坛上得到了回答.

相关问题:

将没有命名空间的类导入到命名空间类

如何使用php的"root"命名空间?

官方PHP文档:

http://php.net/manual/en/language.namespaces.fallback.php

更新:

PHPExcel拥有自己的自动加载器,而2Checkout没有.通过要求一个主要的抽象类来包含所有类.它甚至在官方自述文件中提到:

require_once("/path/to/2checkout-php/lib/Twocheckout.php");
Run Code Online (Sandbox Code Playgroud)

因此,您需要在使用库类之前手动包含它.它可以在别名的帮助下完成,以避免编写完整路径.

use Yii;
...
$path = Yii::getAlias("@vendor/2checkout/2checkout-php/lib/Twocheckout.php");
require_once($path);
$sale = new \Twocheckout_Sale();
Run Code Online (Sandbox Code Playgroud)

要在一个地方使用它没关系,但如果它将在许多应用场所使用,最好在入口脚本中要求它index.php:

require(__DIR__ . '/../../vendor/autoload.php');

require(__DIR__ . '/../../vendor/2checkout/2checkout-php/lib/Twocheckout.php');

require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../../common/config/bootstrap.php');
require(__DIR__ . '/../config/bootstrap.php');
Run Code Online (Sandbox Code Playgroud)

我还建议阅读官方文档中关于使用下载库的提示,根据具体的库,您可以使用更多选项.