PSR-0 自动加载标准
2016-03-31 22:42
337 查看
从2014-10-21日起,PSR-0标准被标记为废弃。推荐使用PSR-4标准作为替换。
加载器(autoloader)必须遵循以下所下要求。
每一个命名空间必须有一个顶级的空间名(‘Vendor Name’)
每一个命名空间可以拥有多个子命名空间
从文件系统中加载时,命名空间中的分隔符(\)将被转化为文件分隔符
类名中的每一个
从文件系统中加载时,完整命名空间或类须以
开发商名、命名空间和类可以由大小写字母构成(区分大小写)
这些应当是实现一个自动加载器的最低标准。你可以通过这个可以加载PHP 5.3类的自动加载器来实践下这些标准。
http://gist.github.com/221634(要翻墙???)
原文 阅读PSR-0
加载器(autoloader)必须遵循以下所下要求。
要求:
一个完整的命名空间或类必须拥有以下结构\<Vendor Name>\(<Namespace>\)*<Class Name>
每一个命名空间必须有一个顶级的空间名(‘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类的自动加载器来实践下这些标准。
代码实现
<?php function autoload($className) { $className = ltrim($className,'\\');//去除命名空间前面的反斜杠 $fileName = ''; $namespace = ''; if($lastNsPos = strrpos($className,'\\')) {//类名前反斜杠的位置 $namespace = substr($className,0,$lastNsPos);//命名空间 $className = substr($className,$lastNsPos + 1);//类名 $fileName = str_replace('\\',DIRECTORY_SEPARATOR,$namespace). DIRECTORY_SEPARATOR;//文件名 } $fileName .= str_replace('_',DIRECTORY_SEPARATOR,$className). '.php';//标准中的要以.php作为后缀,类名的下划线需要转化为文件分隔符 require $fileName; } spl_autoload_register('autoload');
SplClassLoader 实现
下面是一个简单的SplClassLoader 实现,如果你遵循以上标准,你可以通过它来加载类。推荐使用PSR-0标准来加载 PHP 5.3的类http://gist.github.com/221634(要翻墙???)
原文 阅读PSR-0
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- php7 读取php.ini[4]
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- Extjs列表详细信息窗口新建后自动加载解决方法
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表