PHP名称空间问题
我正在尝试使用外部库。 因为存在一些冲突,我正在使用名称空间(PHP5.3) 目标根本不是更改外部库(只是在顶部添加名称空间) 问题是在图书馆内部,有几种情况不起作用PHP名称空间问题,php,namespaces,Php,Namespaces,我正在尝试使用外部库。 因为存在一些冲突,我正在使用名称空间(PHP5.3) 目标根本不是更改外部库(只是在顶部添加名称空间) 问题是在图书馆内部,有几种情况不起作用 is_a($obj,'3thpartyclassname')仅当我在3thpartyclassname前面添加名称空间时才起作用 第三方使用本机类,但只有在我打开全局空间(new\Exception)时它们才起作用 有没有办法不做任何修改就完成这项工作 更新 使用\异常作为异常;解决问题2 我只对is_a和is_的子类有问题。
仅当我在3thpartyclassname前面添加名称空间时才起作用is_a($obj,'3thpartyclassname')
- 第三方使用本机类,但只有在我打开全局空间(
)时它们才起作用new\Exception
我只对is_a和is_的子类有问题。它们都需要名称空间并忽略当前名称空间 不,您必须进行一些修改
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
方法的是一个
和是子类要求您输入完全限定的类名(包括名称空间)。据我所知,从PHP5.3.5开始就没有办法解决这个问题。不过,使用instanceof
应该可以解决这两个问题
导入本机类(如Exception)也应该有效,例如
namespace My\Own\Namespace;
use \Exception as Exception;
throw new Exception('something broke');
有关更多信息,请参阅。我认为没有任何方法可以使is_()尊重相对名称空间(例如当前名称空间或使用use
命令导入的名称空间)。这是因为它接受一个字符串参数并在不同的上下文中执行。您需要切换到instanceof
语法。因此,不,我不认为这将帮助您避免库之间的冲突,这两个库都是针对全局名称空间编写的,您仍然需要找到这样的实例并直接寻址它们