Maison >développement back-end >tutoriel php >PSR-0 自动加载标准

PSR-0 自动加载标准

WBOY
WBOYoriginal
2016-07-29 08:55:361262parcourir

从2014-10-21日起,PSR-0标准被标记为废弃。推荐使用PSR-4标准作为替换。

加载器(autoloader)必须遵循以下所下要求。

要求:

  • 一个完整的命名空间或类必须拥有以下结构 \<vendor name>\(<namespace>\)*<class name></class></namespace></vendor>
  • 每一个命名空间必须有一个顶级的空间名(‘Vendor Name’)
  • 每一个命名空间可以拥有多个子命名空间
  • 从文件系统中加载时,命名空间中的分隔符(\)将被转化为文件分隔符
  • 类名中的每一个_(下划线)将被转化为文件分隔符。命名空间中的_ 没有特殊含义
  • 从文件系统中加载时,完整命名空间或类须以.php作为后缀名
  • 开发商名、命名空间和类可以由大小写字母构成(区分大小写)

    示例

  • \Doctrine\Common\IsolatedClassLoader=>/path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php

  • \Symfony\Core\Request=>/path/to/project/lib/vendor/Symfony/Core/Request.php
  • \Zend\Acl=>/path/to/project/lib/vendor/Zend/Acl.php
  • \Zend\Mail\Message=>/path/to/project/lib/vendor/Zend/Mail/Message.php

命名空间和类中的下划线

  • \namespace\package\Class_Name=>/path/to/project/lib/vendor/namespace/package/Class/Name.php
    \namespace\package_name\Class_Name=>/path/to/project/lib/vendor/namespace/package_name/Class/Name.php

这些应当是实现一个自动加载器的最低标准。你可以通过这个可以加载PHP 5.3类的自动加载器来实践下这些标准。

代码实现

<code><span><?php </span><span><span>function</span><span>autoload</span><span>(<span>$className</span>)</span>
{</span><span>$className</span> = ltrim(<span>$className</span>,<span>'\\'</span>);<span>//去除命名空间前面的反斜杠</span><span>$fileName</span>  = <span>''</span>;
    <span>$namespace</span> = <span>''</span>;
    <span>if</span>(<span>$lastNsPos</span> = strrpos(<span>$className</span>,<span>'\\'</span>)) {<span>//类名前反斜杠的位置</span><span>$namespace</span> = substr(<span>$className</span>,<span>0</span>,<span>$lastNsPos</span>);<span>//命名空间</span><span>$className</span> = substr(<span>$className</span>,<span>$lastNsPos</span> + <span>1</span>);<span>//类名</span><span>$fileName</span>  = str_replace(<span>'\\'</span>,DIRECTORY_SEPARATOR,<span>$namespace</span>). DIRECTORY_SEPARATOR;<span>//文件名</span>
}
    <span>$fileName</span> .= str_replace(<span>'_'</span>,DIRECTORY_SEPARATOR,<span>$className</span>). <span>'.php'</span>;<span>//标准中的要以.php作为后缀,类名的下划线需要转化为文件分隔符</span><span>require</span><span>$fileName</span>;
}
spl_autoload_register(<span>'autoload'</span>);</span></code>

SplClassLoader 实现

下面是一个简单的SplClassLoader 实现,如果你遵循以上标准,你可以通过它来加载类。推荐使用PSR-0标准来加载 PHP 5.3的类

  • http://gist.github.com/221634(要翻墙???)

原文 阅读PSR-0

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了PSR-0 自动加载标准,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Déclaration:
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
Article précédent:PHP程序员面试问题Article suivant:负载均衡配置