Dan*_*l M 6 php oop namespaces
我想知道PHP是否提供一种本机方式来检查类(实例)是否属于某个命名空间。
其实并不重要,只是为了您的理解,我是如何提出这个问题的:
使用ZF2,我为该onDispatch
事件提供了一个事件处理程序。但是,对于任何模块的任何控制器的每次分派,都会调用此处理程序。显然,如果调度此模块的控制器,我只想在此处理程序中执行操作。
所以我想检查Controller是否在模块的命名空间中。
顺便说一句,我暂时通过在类名(strpos($className, 'ModuleName\Controller') !== false
)上进行字符串比较来解决此问题。我猜想使用substr()
或strncmp()
诸如此类的效果要好于strpos()
,但就我而言,这并不重要。
提前致谢!
//编辑:为了清楚起见,我正在寻找类似的东西:
// $foo is an instance of MyApp\Controller\Moo
is_in_namespace('MyApp\Controller', $foo); // true
Run Code Online (Sandbox Code Playgroud)
要么
// $foo is an instance of MyApp\Controller\Moo
get_namespace($foo) === 'MyApp\Controller'; // true
Run Code Online (Sandbox Code Playgroud)
您可以使用get_class()
获取对象的类,然后strops()
在其上使用以查找其是否包含名称空间。没有等效get_namespace()
功能。
例:
function is_in_namespace($namespace, $object) {
return strpos(get_class($object), $namespace . '\\') === 0;
}
Run Code Online (Sandbox Code Playgroud)
function get_namespace($object) {
$class = get_class($object);
$pos = strrpos($class, '\\');
return substr($class, 0, $pos);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
969 次 |
最近记录: |