首页 > 后端开发 > php教程 > 自动加载类的另一种方式实现问题

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

WBOY
发布: 2016-06-06 20:46:29
原创
900 人浏览过

hello,看了手册上关于自动加载的另一种更快速的方式后,动手试了下,发现挺好用的。不过碰到了个小问题,就是当new class()的那个文件和包含类的文件夹不是属于同级的时候不知道如何自动加载了。
index.php:

<code class="lang-php">namespace inc;
spl_autoload_extensions('.class.php');
spl_autoload_register();
new a();
</code>
登录后复制
登录后复制

inc\a.class.php:

<code class="lang-php">namespace inc;
class a{
    function __construct(){
        echo 'a';
    }
}
</code>
登录后复制
登录后复制

上面这样是可以输出a的,但是当把index.php放到比如index\index.php的时候就没法加载类了。请教下这种情况下有没有好的解决办法。
补充下,自己写加载程序可以,但是比较喜欢那老外的方法,2个函数就让php自动完成加载,不需要写额外的代码,好神奇。

回复内容:

hello,看了手册上关于自动加载的另一种更快速的方式后,动手试了下,发现挺好用的。不过碰到了个小问题,就是当new class()的那个文件和包含类的文件夹不是属于同级的时候不知道如何自动加载了。
index.php:

<code class="lang-php">namespace inc;
spl_autoload_extensions('.class.php');
spl_autoload_register();
new a();
</code>
登录后复制
登录后复制

inc\a.class.php:

<code class="lang-php">namespace inc;
class a{
    function __construct(){
        echo 'a';
    }
}
</code>
登录后复制
登录后复制

上面这样是可以输出a的,但是当把index.php放到比如index\index.php的时候就没法加载类了。请教下这种情况下有没有好的解决办法。
补充下,自己写加载程序可以,但是比较喜欢那老外的方法,2个函数就让php自动完成加载,不需要写额外的代码,好神奇。

推荐使用Composer进行自动加载, PSR-0规范.

这个加载方式在Zend中早已被内化,例如一个在Vendor/MyClass.php中的类,可以用Vendor_MyClass来调用。
怎么区分文件夹,这是需要自己写程序实现的。如下代码:

<code class="lang-php">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');
</code>
登录后复制
相关标签:
php
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板