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

时间:2015-01-24 17:18:14

标签: php namespaces yii2 2checkout psr-4

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

修改

根据建议我尝试使用class

$sale = new \Twocheckout_Sale();

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

2 个答案:

答案 0 :(得分:9)

当类没有命名空间时,它意味着它在根命名空间中。

选项1:

use Twocheckout;

...

Twocheckout::format('json');

选项2:

\Twocheckout::format('json');

例如,PHPExcel扩展程序也没有名称空间,类似问题已在official forum上得到解答。

相关问题:

Importing class without namespace to namespaced class

How to use "root" namespace of php?

官方PHP文档:

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

<强>更新

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

require_once("/path/to/2checkout-php/lib/Twocheckout.php");

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

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

如果在一个地方使用它可以,但如果它将在许多应用场所使用,最好在入口脚本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');

我还建议您阅读官方文档中有关using downloaded libraries的提示,根据具体的库,您可以使用更多选项。

答案 1 :(得分:0)

/* Try this  */
public function actionTest(){
    //package
    require(Yii::getAlias('@vendor')."/Excel/Spreadsheet_Excel_Reader.php");

    $exldata = new \Spreadsheet_Excel_Reader();


}