PHP命名空间问题

dan*_*car 7 php namespaces

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

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

问题出在库内有几种情况不起作用

  • is_a($obj,'3thpartyclassname') 仅当我在3thpartyclassname前添加命名空间时才有效
  • 第3方使用本机类,但只有在我处理全局空间时它们才起作用(new \Exception)

有没有任何方法可以使这项工作没有修改?

将use\Exception更新为Exception; 解决问题2

我只遇到is_a和is_subclass_of的问题.它们都需要命名空间并忽略当前的命名空间.

Gor*_*don 12

不,你必须做一些修改

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
Run Code Online (Sandbox Code Playgroud)

is_ais_subclass_of方法要求你把在完全合格的类名(包括命名空间).据我所知,从PHP 5.3.5开始,没有办法解决这个问题.使用instanceof应该解决两个基础.

导入本机类,例如Exception也应该有效,例如

namespace My\Own\Namespace;
use \Exception as Exception;
throw new Exception('something broke');
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅PHP手册中有关命名空间章节.