PHP名称空间&;引用不包含在名称空间中的类

PHP名称空间&;引用不包含在名称空间中的类,php,Php,我有一个简单的问题,希望能有一个快速的答案。我编写的代码大量使用了名称空间(我在任何地方都使用完全限定的名称);但是,需要包含一段代码(日历/日期选择器控件,不是我自己编写的)。当我尝试创建控件时,它采用当前名称空间(GUI),导致此错误:“PHP致命错误:在第1852行的C:\inetpub\wwwroot\Calico\Calico\u classes\u v2.PHP中找不到类'GUI\tc\u calendar'。现在,calendar控件本身(以及它的底层类文件)没有使用名称空间,我有

我有一个简单的问题,希望能有一个快速的答案。我编写的代码大量使用了名称空间(我在任何地方都使用完全限定的名称);但是,需要包含一段代码(日历/日期选择器控件,不是我自己编写的)。当我尝试创建控件时,它采用当前名称空间(GUI),导致此错误:“PHP致命错误:在第1852行的C:\inetpub\wwwroot\Calico\Calico\u classes\u v2.PHP中找不到类'GUI\tc\u calendar'。现在,calendar控件本身(以及它的底层类文件)没有使用名称空间,我有点担心尝试修改它(之前的一次尝试没有成功)

如何将不包含在命名空间中的控件导入/包含到代码的其余部分中?PHP是否有类似“将类日历作为\calendar\calendar从文件导入”的功能

编辑: 更多信息:我有一个名为“tc_calendar”的类,包含在一个名为“tc_calendar.php”的文件中。它不是任何名称空间的一部分

在一个单独的文件中,我有几个类(位图、CompositeCalendar、EventEditor、TimeExtractor),所有这些类都包含在它们相应的名称空间中(GUI、数据、Extract等)

在GUI名称空间中包含的其中一个类CompositeCalendar中,我试图创建tc_日历的实例。然而,PHP抛出了一个错误(如上)。tc_日历不是任何namspace的一部分(而且肯定不是GUI名称空间的一部分,PHP只是假设了这个名称空间,因为它似乎找不到它),我需要帮助创建它的一个实例


tldr$newcontrol=new tc_calendar()不工作;PHP尝试猜测它的名称空间(因为没有指定名称空间,因为tc_日历不是任何名称空间的一部分),并提出了\GUI\tc_日历(显然是错误的)。如何从名称空间中访问不包含在名称空间中的类?

您的意思是:

namespace GUI;

use \tc_calendar as Calendar;

$myCalendar = new Calendar();
作为日历是可选的。如果您将
命名为日历
,也可以将其保留为原始名称
tc\u calendar

更新 要以评论的形式表达:

namespace {
    class tc_calendar {} 
}
namespace GUI {
    use \tc_calendar;

    class CompositeCalendar { 
        private function blah() { 
             $control = new tc_calendar();   
             $control->stuff(); 
        } 
    }
}
不过,我不会将外部库复制粘贴到同一个文件中。这是一个坏习惯。最好将其保存在另一个文件中,然后将其包括在内,并具有以下内容:

namespace GUI;

use \tc_calendar;

require_once 'tc_calendar.php';

class CompositeCalendar { 
        private function blah() { 
             $control = new tc_calendar();   
             $control->stuff(); 
        } 
}
或者将我的3个片段组合成你喜欢的任何其他形式

另外,如果您只是基于
tc\u calendar
构建calendar类,我建议您扩展calendar:

namespace GUI;

use \tc_calendar;

require_once 'tc_calendar.php';

class CompositeCalendar extends tc_calendar { 
        private function blah() {  
             $this->stuff(); 
        } 
}

任何不在命名空间中的类都自动位于全局命名空间中。
要从任何位置引用全局命名空间中的任何内容,请使用前面的一个
\

new \tc_calendar;

更像:类tc_calendar{}名称空间GUI{class CompositeCalendar{private function blah(){$control=new tc_calendar();$control->stuff();}}},PHP抱怨找不到tc_calendar,猜测我指的是\GUI\tc_calendar。我只想使用tc_calendar对象。最好不要修改tc_calendar代码本身,因为它是其他人的代码。我的回答允许您使用
tc_calendar
,而不用修改任何名称下的代码。问题出在哪里?@user978122仍然缺少一些东西?一点也不。因睡眠不足而昏倒