在 Yii2 中使用不带命名空间的 类
Using classes without namespace with Yii2
我想将 Checkout SDK 与 Yii2 一起使用,但由于该库不支持 PSR-4 标准(命名空间),因此我无法集成它。我怎样才能将这个库用于我的目的?
编辑
按照建议,我尝试将 class 用作
$sale = new \Twocheckout_Sale();
但我仍然无法让它工作。
当 class 没有命名空间时,这意味着它在根命名空间中。
选项 1:
use Twocheckout;
...
Twocheckout::format('json');
选项 2:
\Twocheckout::format('json');
例如PHPExcel extension also doesn't have namespaces, similar question was answered on 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
没有。所有 classes 都包含在需要一个主要摘要 class 中。甚至官方都提到了readme:
require_once("/path/to/2checkout-php/lib/Twocheckout.php");
因此您需要在使用库 classes 之前手动包含它。可以在别名的帮助下完成,以避免写入完整路径。
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 的提示,根据具体的库,您可以使用更多选项。
/* Try this */
public function actionTest(){
//package
require(Yii::getAlias('@vendor')."/Excel/Spreadsheet_Excel_Reader.php");
$exldata = new \Spreadsheet_Excel_Reader();
}
我想将 Checkout SDK 与 Yii2 一起使用,但由于该库不支持 PSR-4 标准(命名空间),因此我无法集成它。我怎样才能将这个库用于我的目的?
编辑
按照建议,我尝试将 class 用作
$sale = new \Twocheckout_Sale();
但我仍然无法让它工作。
当 class 没有命名空间时,这意味着它在根命名空间中。
选项 1:
use Twocheckout;
...
Twocheckout::format('json');
选项 2:
\Twocheckout::format('json');
例如PHPExcel extension also doesn't have namespaces, similar question was answered on 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
没有。所有 classes 都包含在需要一个主要摘要 class 中。甚至官方都提到了readme:
require_once("/path/to/2checkout-php/lib/Twocheckout.php");
因此您需要在使用库 classes 之前手动包含它。可以在别名的帮助下完成,以避免写入完整路径。
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 的提示,根据具体的库,您可以使用更多选项。
/* Try this */
public function actionTest(){
//package
require(Yii::getAlias('@vendor')."/Excel/Spreadsheet_Excel_Reader.php");
$exldata = new \Spreadsheet_Excel_Reader();
}