看了手册上关于自动加载的另一种更快速的方式后,动手试了下,发现挺好用的。不过碰到了个小问题,就是当new class()的那个文件和包含类的文件夹不是属于同级的时候不知道如何自动加载了。
index.php:
namespace inc;
spl_autoload_extensions('.class.php');
spl_autoload_register();
new a();
inca.class.php:
namespace inc;
class a{
function __construct(){
echo 'a';
}
}
上面这样是可以输出a的,但是当把index.php放到比如indexindex.php的时候就没法加载类了。请教下这种情况下有没有好的解决办法。
补充下,自己写加载程序可以,但是比较喜欢那老外的方法,2个函数就让php自动完成加载,不需要写额外的代码,好神奇。
这个加载方式在Zend中早已被内化,例如一个在Vendor/MyClass.php中的类,可以用Vendor_MyClass来调用。
怎么区分文件夹,这是需要自己写程序实现的。如下代码:
function _vendor_autoload($class) {
$parts = explode('\\', $class);
# Support for non-namespaced classes.
$parts[] = str_replace('_', DIRECTORY_SEPARATOR, array_pop($parts));
$path = implode(DIRECTORY_SEPARATOR, $parts);
$file = stream_resolve_include_path($path.'.php');
if($file !== false) {
require $file;
}
}
spl_autoload_register('_vendor_autoload');
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。