PSR-0 自动加载标准

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

加载器(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的类

原文 阅读PSR-0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值