php – __autoload的最佳解决方案
随着我们的
PHP5 OO应用程序的增长(大小和流量),我们决定重新访问__autoload()策略.
我们总是通过它包含的类定义来命名文件,所以Class Customer将包含在Customer.php中.我们曾经列出可能存在文件的目录,直到找到正确的.php文件. 这是非常低效的,因为您可能会经历一些您不需要的目录,并且在每个请求(因此调用stat())的情况下执行此操作. 我想到的解决方案 – 使用命名规则来指定目录名称(类似于PEAR).缺点:不会太大,造成可怕的班级名称. 使用某种预先构建的阵列阵列(推动它的__autoload).缺点:需要在任何部署新代码之前进行重建. 在“飞行”中建立数组并缓存它.这似乎是最好的解决方案,因为它允许你想要的任何类名和目录结构,并且完全灵活的新的文件只是被添加到列表中.关心的是:在哪里存储它以及删除/移动的文件.对于存储,我们选择了APC,因为它没有磁盘I / O开销.关于文件删除,没关系,因为你可能不想要任何地方要求他们.至于移动…这是未解决的(我们忽视它在历史上并没有发生很多次我们). 任何其他解决方案?
我也一直在玩autoload一段时间,最后我实现了一些命名空间的自动装载机(是的,它也适用于PHP5.2).
策略很简单: 典型代码如下: <?php loader::import('foo::bar::SomeClass'); loader::import('foo::bar::OtherClass'); $sc = new SomeClass(); ?> 当自动加载被触发时,存储在数组中的完整类名被转换为真正的文件系统位置(双冒号被目录分隔符替换),并且包含生成的文件名. 我知道这不是你要求的,但它可能会解决目录遍历问题,因为加载程序直接知道文件在哪里(附加的功能,你可以让你的类组织在目录中,没有明显的性能罚款). 我可以为您提供一些工作示例,但是我很害羞地向公众显示我的肮脏的代码.希望以上解释是有用的… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |