php – __autoload检测并包含接口
发布时间:2020-12-13 22:08:56 所属栏目:PHP教程 来源:网络整理
导读:我在我的脚本中使用__autoload来根据需要包含类.我的脚本使用类名中的提示来查找包含它的文件.如果它在模型中结束,它在模型目录中,控制器在控制器目录中等.我开始实现接口,因此需要调整我的自动加载器. 理想情况下,当创建对象时,自动装带器将确定对象的文件
我在我的脚本中使用__autoload来根据需要包含类.我的脚本使用类名中的提示来查找包含它的文件.如果它在模型中结束,它在模型目录中,控制器在控制器目录中等.我开始实现接口,因此需要调整我的自动加载器.
理想情况下,当创建对象时,自动装带器将确定对象的文件名,存储位置,并包含该文件.然后它将询问该类,以了解它实现的接口,然后自动包含这些文件. 就像是 function __autoload($classname){ echo $classname; include ("classes/$classname.php"); $interfaces = class_implements($classname,FALSE); foreach($interfaces as $name){ if(!class_exists($name,FALSE)){ include("interfaces/".$name."inter.php"); } } } 除非我这样做,否则我会收到错误
是不是可以在__autoload()中执行此操作?我是否应该继续依赖命名约定来区分对象类型和存储位置? 解决方法
在定义实现的接口之前,您无法定义类,并且任何未知接口也会触发自动加载功能.这意味着在第3行包含类时,它将再次触发自动加载功能,接口为$classname.现在当从第二个__autoload()返回时 – 它将再次尝试包含接口,这将因“已定义”而失败.
附加:使用__autoload()不建议使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |