开发者社区> 问答> 正文

自动加载类的另一种方式实现问题

看了手册上关于自动加载的另一种更快速的方式后,动手试了下,发现挺好用的。不过碰到了个小问题,就是当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自动完成加载,不需要写额外的代码,好神奇。

展开
收起
落地花开啦 2016-06-17 17:03:06 1911 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    这个加载方式在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');
    2019-07-17 19:43:09
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
继承与功能组合 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多