我正在尝试使用外部库。 因为有一些冲突我使用命名空间(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_a
和is_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/