Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 禁用某些类/文件的命名空间使用_Php_Namespaces - Fatal编程技术网

Php 禁用某些类/文件的命名空间使用

Php 禁用某些类/文件的命名空间使用,php,namespaces,Php,Namespaces,我正在为我的CMS开发一个插件系统,在我的CMS中我经常使用名称空间。 我想要的是,插件的开发人员不必在插件中使用名称空间,因为对于以前没有使用过名称空间的开发人员来说,它们可能非常复杂。名称空间的主要问题是可以注册的事件。现在,插件开发人员必须使用use\events\Event,如果他们只是导入类,他们仍然无法使用新事件()因为它使用名称空间。我想要的是,他们可以只使用newevent()(类本身将由CMS的自动加载程序自动加载,因此不需要包含) 所以基本上,我希望在某些类或文件中禁用名称空

我正在为我的CMS开发一个插件系统,在我的CMS中我经常使用名称空间。 我想要的是,插件的开发人员不必在插件中使用名称空间,因为对于以前没有使用过名称空间的开发人员来说,它们可能非常复杂。名称空间的主要问题是可以注册的事件。现在,插件开发人员必须使用
use\events\Event,如果他们只是导入类,他们仍然无法使用
新事件()因为它使用名称空间。我想要的是,他们可以只使用
newevent()(类本身将由CMS的自动加载程序自动加载,因此不需要包含)

所以基本上,我希望在某些类或文件中禁用名称空间。所以
new\events\Event()看起来就像
newevent()
而不删除
命名空间事件来自
事件


我希望我解释得很清楚,我不是解释这类东西的最佳人选。

我不确定我是否完全理解,但要在“全局”命名空间中运行代码,可以执行以下操作:

namespace {
    // this runs in global namespace
}

另请参见:

我不确定是否完全理解,但要在“全局”命名空间中运行代码,可以执行以下操作:

namespace {
    // this runs in global namespace
}

另请参见:

否。换句话说,这不起作用:

namespace Foo {
    class Event {}
    include('plugin.php');   // plugin.php cannot just do new Event();
}
这不应该是一个真正的问题,因为CMS的插件开发文档应该清楚名称空间的使用情况,插件开发人员只需要编写如下内容

use Plugin\Namespace\Events\MyEventType;

参考MyEventType而无需对其进行限定。对于插件作者来说,这当然不算太高吧?

不。换句话说,这是行不通的:

namespace Foo {
    class Event {}
    include('plugin.php');   // plugin.php cannot just do new Event();
}
这不应该是一个真正的问题,因为CMS的插件开发文档应该清楚名称空间的使用情况,插件开发人员只需要编写如下内容

use Plugin\Namespace\Events\MyEventType;

参考MyEventType而无需对其进行限定。当然,这对插件作者要求不高?

AFAIK这是不可能的,但是如果您使用包含所需文件的加载程序,那么插件作者可以使用
loader::load('someclass')包含一个类
您可以让加载程序返回带有命名空间的完整类名,插件可以使用它:

$em_classname = Loader::load('eventmanager');
//dymamic use
$em = new $em_classname;
$em->registerEvent();
//static use
$em_classname::registerEvent();

对于动态使用,您甚至可以返回类的实例而不是类名。

AFAIK这是不可能的,但是如果您使用包含所需文件的加载程序,那么插件作者可以使用
loader::load('someclass')包含类
您可以让加载程序返回带有命名空间的完整类名,插件可以使用它:

$em_classname = Loader::load('eventmanager');
//dymamic use
$em = new $em_classname;
$em->registerEvent();
//static use
$em_classname::registerEvent();

对于动态使用,您甚至可以返回类的实例,而不是类名。

我认为您是对的,它们不难使用,但对于以前没有使用过它们的人来说,它们可能很复杂。我先来看看Jack的全局名称空间,如果这不是我要搜索的东西,我可能会选择这个选项。谢谢你的回复。:)我认为你是对的,它们并不难使用,但对于那些在它们变得复杂之前没有使用过它们的人来说。我先来看看Jack的全局名称空间,如果这不是我要搜索的东西,我可能会选择这个选项。谢谢你的回复。:)嗨,首先谢谢你的回答。我想这并不是我要搜索的,我的意思是插件开发人员首先需要使用
namespace{}
,但是名称空间的使用并没有被真正禁用。例如,如果我想从插件加载事件,则需要使用
use\events\event,这正是我想要阻止的,因为对于PHP初学者来说这很复杂。可能是你理解我的解释错了,我的不好,因为我不擅长解释。我想我只是使用名称空间。我只需要把它记录下来,然后好好解释一下。嗨,首先谢谢你的回答。我想这并不是我要搜索的,我的意思是插件开发人员首先需要使用
namespace{}
,但是名称空间的使用并没有被真正禁用。例如,如果我想从插件加载事件,则需要使用
use\events\event,这正是我想要阻止的,因为对于PHP初学者来说这很复杂。可能是你理解我的解释错了,我的不好,因为我不擅长解释。我想我只是使用名称空间。我只需要把它记录下来,然后解释清楚。是的,我明白你想告诉我什么。但是,完全消除某些类或文件中对名称空间的需求的主要目标似乎是不可能的。谢谢你的回复。哦,如果你在理解我的问题时有问题,我编辑了我的问题,现在可以更好地解释。不确定,但对于php初学者来说,这可能是使用
$eventxyz=load('eventxyz')最简单的方法其中load()是一个cms函数,它包含所需的文件并返回所请求类的实例。。。我来看看:)。是的,我明白你想告诉我什么。但是,完全消除某些类或文件中对名称空间的需求的主要目标似乎是不可能的。谢谢你的回复。哦,如果你在理解我的问题时有问题,我编辑了我的问题,现在可以更好地解释。不确定,但对于php初学者来说,这可能是使用
$eventxyz=load('eventxyz')最简单的方法其中load()是一个cms函数,它包含所需的文件并返回所请求类的实例。。。我来看看:)。