我想使用 Checkout SDK使用 Yii2,但由于该库不支持 PSR-4 标准(命名空间),因此我无法集成它。我怎样才能将这个库用于我的目的?
编辑
按照建议,我尝试使用 class as
$sale = new \Twocheckout_Sale();
但我仍然无法让它工作。
最佳答案
当类没有命名空间时,意味着它在根命名空间中。
选项 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 的官方文档中的提示。 ,根据特定的库,您可以使用更多选项。
关于php - 在 Yii2 中使用没有命名空间的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28128117/