重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
普通的命名空间自动加载后,又对框架不熟,在M层或者C层想include直接调用第三方类时通常都不行会报错。原因是有命名空间和自动加载这两个php特性制约。
10年积累的成都网站制作、成都做网站、外贸营销网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有寒亭免费网站建设让你可以放心的选择与我们合作。要解决这两个问题就只要两步即可,但当然在正规项目中不建议使用,要遵循MVC和PCR-0(1.只有一个入口文件;2.在类文件中不能使用直接实现方法的写法;3.命名空间与绝对路径一致)法则,这只是一个偏门技巧。
解决方法
在include文件后,用spl_autoload_unregister()把自动加载的函数注销掉;
如:spl_autoload_unregister('\\Test\\Loader::autoload');
但在运用完第三方类的时候要马上把之前的自动加载函数运行一次,不然其他方法加载不了会报错。
\main\Test1::test();
spl_autoload_register('\\Test\\Loader::autoload');
2. 第三方类要加上单独的命名空间,不然在使用的时候会,include类会以当前的命名空间来使用。如果加载类不是在跟当前命名空间同一个目录,就会报错。
贴其中一个类代码:
namespace Test; class Factory { public static function createDatabase() { $db = new Database(); Register::set('db1',$db); include BASEDIR.'/Test1.php'; spl_autoload_unregister('\\Test\\Loader::autoload'); \main\Test1::test(); spl_autoload_register('\\Test\\Loader::autoload'); return $db; } }最终还是叮嘱不建议程序用这个,尽量遵守面向过程的编程方法。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。