PHP 命名空间问题

标签 php namespaces

我正在尝试使用外部库。 因为有一些冲突我使用命名空间(php 5.3)

目标是根本不改变外部库(只是在顶部添加命名空间)

问题是库里面有几种情况不工作

  • is_a($obj,'3thpartyclassname') 仅当我在 3thpartyclassname 前面添加 namespace 时才有效
  • 第 3 方使用 native 类,但只有在我应用全局空间时它们才起作用(new\Exception)

有什么方法可以在不修改的情况下使它工作?

更新 使用\Exception 作为异常;解决问题2

我只有 is_a 和 is_subclass_of 有问题。它们都需要命名空间并忽略当前命名空间。

最佳答案

不,你必须做一些修改

namespace My\Own\Namespace;                // declare your own namespace
use My\ThirdParty\Component;               // import 3rd party namespace
$component = new Component;                // create instance of it
var_dump(is_a($component, 'Component'));   // FALSE
var_dump($component instanceof Component); // TRUE

is_ais_subclass_of 方法要求您输入完全限定的类名(包括命名空间)。据我所知,从 PHP 5.3.5 开始,没有办法解决这个问题。不过,使用 instanceof 应该可以解决这两个问题。

导入 native 类,例如 Exception 也应该可以工作,例如

namespace My\Own\Namespace;
use \Exception as Exception;
throw new Exception('something broke');

参见 chapter on Namespace in the PHP Manual了解更多信息。

关于PHP 命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5337684/

相关文章:

php - 如何在 PHP 函数中为每个帖子 ID 选择类别

javascript - AJAX 问题 : button doesn't responsed anymore

java - 项目层次结构是 Idea 而不是 BlueJ

php - PDO 声称未捕获异常,即使它在 try/catch block 内?

php - 添加服务提供者类后找不到类

php - yii\base\InvalidParamException 消息 View 文件不存在

从浏览器而非 CLI 调用时 PHP 脚本失败

php - 在 mysql 数据库中存储原始 php、javascript、html 或类似内容的最佳实践方法是什么?

ruby - 如何在不手动加载类的情况下获取命名空间中的所有类?

php - PHP 中 XPath 的 'undefined namespace prefix' 问题?