PSR-0

自动加载规范

此规范已被弃用 - 本规范已于2014年10月21日被标记为弃用,目前最新的替代规范为 [PSR-4] 。

本文是为自动加载器(autoloader)实现通用自动加载,所需要遵循的编码规范。

规范说明

  • 一个标准的 命名空间(namespace) 与 类(class) 名称的定义必须符合以下结构: \<Vendor Name>\(<Namespace>\)*<Class Name>
  • 其中Vendor Name为每个命名空间都必须要有的一个顶级命名空间名;
  • 需要的话,每个命名空间下可以拥有多个子命名空间;
  • 当根据完整的命名空间名从文件系统中载入类文件时,每个命名空间之间的分隔符都会被转换成文件夹路径分隔符;
  • 类名称中的每个 _ 字符也会被转换成文件夹路径分隔符,而命名空间中的 _ 字符则是无特殊含义的。
  • 当从文件系统中载入标准的命名空间或类时,都将添加 .php 为目标文件后缀;
  • 组织名称(Vendor Name)命名空间(Namespace) 以及 类的名称(Class Name) 可由任意大小写字母组成。

范例

  • \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

以上是使用通用自动加载必须遵循的最低规范标准, 可通过以下的示例函数 SplClassLoader 载入 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';

    require $fileName;
}

SplClassLoader 实例

以下的 gist 是 一个 SplClassLoader 类文件的实例,如果你遵循了以上规范,可以把它用来载入你的类文件。 这也是目前 PHP 5.3 建议的类文件载入方式。

时间: 2024-12-04 00:22:22

PSR-0的相关文章

PHP的PSR规范中文版

FIG组织在制定跟PHP相关规范,简称PSR.目前已有4个代码规范,近期抽空翻译成了中文版.建议做PHP的同学都关注一下. 文档仓库地址:https://github.com/hfcorriez/fig-standards 所有已接受的规范参考:https://github.com/hfcorriez/fig-standards/tree/zh_CN/%E6%8E%A5%E5%8F%97 代码样式规范 本指南的意图是为了减少不同开发者在浏览代码时减少认知的差异. 为此列举一组如何格式化PHP代码

用pb6.0建立B/S结构的应用程序

一.组成Browser/Server结构的模块结构. 由上图所示, 用 Powerbuilder6. 0 开发的各种基于Internet的应用,是利用PowerBuilder6.0 提供的分布式应用技术及PowerScripts编程技术来实现的,相当于编写分布式应用环境下的服务器应用.例如采用PowerScripts语言环境.数据窗口技术等.其制作流程及工作原理是: 1. 建立及配置 Web 服务器. PowerBuilder 中自带O'Reilly公司基于WindowsNT 3.51以上版本和

Laravel5.0学习--01 入门

本文以laravel5.0.22为例. 环境需求 Laravel5.0 框架有一些系统上的需求: PHP 版本 >= 5.4 Mcrypt PHP 扩展 OpenSSL PHP 扩展 Mbstring PHP 扩展 Tokenizer PHP 扩展 在 PHP 5.5 之后, 有些操作系统需要手动安装 PHP JSON 扩展包.如果你是使用 Ubuntu,可以通过 apt-get install php5-json 来进行安装. 我该使用Laravel吗 来自知乎网友的讨论:PHP框架Larav

Oracle 补丁体系(PSR/PSU/CPU) 及 opatch 工具 介绍

原文:http://blog.csdn.net/tianlesoftware/article/details/5809526 一. CPU(Critical Patch Update)     一个CPU内包含了对多个安全漏洞的修复,并且也包括相应必需的非安全漏洞的补丁.CPU是累积型的,只要安装最新发布的CPU即可,其中包括之前发布的所有CPU的内容.事实上,在CPU之前的安全漏洞修改除去个别例外也被包括在CPU中.Oracle公司只对处于标准技术支持和延长支持期间的产品提供CPU更新,对处于

PHP符合PSR编程规范的实例分享_php技巧

前言 关于开发标准这块,可以说一直都是风格迥异,各家都有各家的玩法,民间更是个人玩个人的.目前我们国内比较出名的几个框架(Yii,Laravel) 都已经支持Composer并且加入了PHP-FIG(php框架程序组). 其中Composer的自动加载就支持PHP-FIG指定的PSR-0 和 PSR-4 规范来实现自动加载机制,并且Composer推荐使用PSR-4 PHP-FIG 这是一个自愿非正式的机构,但是就目前对我们的影响来看,可能都已经默认为一个公信组织了,的的确确制定了不少非常好的规

PHP的PSR规范中文版_php基础

文档仓库地址:https://github.com/hfcorriez/fig-standards PSR规范中文版 PSR-0自动加载 PSR-1基本代码规范 PSR-2代码样式 PSR-3日志接口 为何规范 摘录翻译了官方的一句话 本组织旨在通过讨论我们代码项目的共同点以找出一个协作编程的方法. 在此想到了一篇文章<Google为何要执行严格的代码规范>中有这么一段话: 复制代码 代码如下: 在谷歌,我可以查看任何的代码,进入所有谷歌的代码库,我有权查看它们.事实上,这种权限是很少人能拥有

Spring.Net在Mvc4.0中应用的说明

案例Demo:http://yunpan.cn/cJ5aZrm7Uybi3 访问密码 414b Spring.Net在Mvc4.0中应用的说明 1.引用dll       2.修改Global文件 (SpringMvcApplication)       3.控制器添加属性     4.WebConfig配置   <!--必须紧跟着configuration之后-->   <configSections>     <sectionGroup name="spring

Android 4.0设计规范10大改变

在拜读和翻译了Android design设计指导后,对比Android 4.0与Android2.3及之前版本的app设计指导,总结了Android 4.0设计的10大改变: 1. 导航栏 (详见模式PATTERNS>导航Navigation) 由之前的物理按键导航(返回.菜单.搜索.主页)变成了嵌入屏幕的虚拟按键(返回.主页.最近任务).   左侧为早期有4个物理按键的手机,右侧为新版只有3个虚拟按钮的手机 把菜单项和搜索项从导航栏去掉,把之前通过长按主页键才出现的最近任务直接展示在导航栏中

php中0与空 Null false的区别

  代码如下   <?php $test=0; if($test==''){  echo '<br />在php中,0即为空'; //被输出 } if($test===''){  echo '<br />在php中,0即为空'; //不被输出 } if($test==NULL){  echo '<br />在php中,0即为空'; //被输出 } if($test===NULL){  echo '<br />在php中,0即为空'; //不被输出 }

Asp.net 1.0 升级至 ASP.NET 2.0十个问题总结

asp.net|问题     这几天升级了一下原来的1.1项目,发现了一些问题,总结一下放在这里,也提醒还没有来得及升级或准备升级的朋友,升级的过程中少走弯路,少浪费时间. 1.Global.asax文件的处理形式不一样 转化后将出现错误,在vs2003中Global.asax具有代码后置文件,2.0下, 将代码分离文件移到 App_Code 目录下,以便使其自动变为可通过应用程序中的任意 ASP.NET 页面访问."Code-behind"属性将从 ASAX 文件的指令中删除.vs2