Maison > développement back-end > tutoriel php > 自动加载类的另一种方式实现问题

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

WBOY
Libérer: 2016-06-06 20:46:29
original
900 Les gens l'ont consulté

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

<code class="lang-php">namespace inc;
spl_autoload_extensions('.class.php');
spl_autoload_register();
new a();
</code>
Copier après la connexion
Copier après la connexion

inc\a.class.php:

<code class="lang-php">namespace inc;
class a{
    function __construct(){
        echo 'a';
    }
}
</code>
Copier après la connexion
Copier après la connexion

上面这样是可以输出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>
Copier après la connexion
Copier après la connexion

inc\a.class.php:

<code class="lang-php">namespace inc;
class a{
    function __construct(){
        echo 'a';
    }
}
</code>
Copier après la connexion
Copier après la connexion

上面这样是可以输出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>
Copier après la connexion
Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal