php - 在 Yii2 中使用没有命名空间的类

标签 php namespaces yii2 2checkout psr-4

我想使用 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/

相关文章:

php - 将行和/或列合并到 GROUP BY 中的一个字段中

HTML 中的 PHP 表单,无法连接

javascript - 检查时差是否小于 45 分钟并运行函数 - AngularJS

python - 模拟 Python 对象实例化

PHP 命名空间移除/映射和重写标识符

javascript - 通过 ajax 以 Yii2 形式传递附加数据

php - 在现有电子邮件正文的底部添加一个 HTML 元素

PHP变量名与 session 变量冲突

php - Yii2 db mysql 连接抛出 ssh 端口 33060

api - Yii2 REST API 关系数据返回