• PSR规范


    PSR-4

       PSR-4规范描述了一个标准的自动加载器策略,指在运行时按需查找PHP类、接口或Traits。支持PSR-4自动加载器标准的PHP组建和框架,使用同一个自动加载器就能找到相关代码,然后将其载入PHP解释器。有了这个功能,就可以把现代PHP生态系统中很多客户操作的组件联系起来。

    编写一个PSR-4自动加载器

       PSR-4规范不要求改变代码的实现方式,只建议如何使用文件系统目录结构和PHP命名空间组织代码,PSR-4规范以来PHP命名空间和文件系统目录结构查找并加载PHP类、接口和Traits,这正是PSR-4的精髓所在。

       下面我们来自己手动实现一个PSR-4自动加载器:

    <?php
    /**
     * 使用SPL组册这个自动加载函数后,遇到下述代码时这个函数会尝试   从/path/to/project/src/Baz/Qux.php文件中加载FooBarBazQux类:
     *  new FooBarBazQux;
     * @param string $class 完全限定的类名。
     * @return void
     **/
    spl_autoload_register(function ($class) {
        // 项目的命名空间前缀
        $prefix = 'Foo\Bar\';
        
        // 目录前缀对应的根目录
        $base_dir = __DIR__ . '/src/';
        
        // 判断传入的类是否使用了这个命名空间前缀
        $len = strlen($prefix);
        if (strncmp($prefix, $class, $len) !== 0) {
            // 没有使用,交给注册的下一个自动加载器处理
            return;
        }
        
        // 获取去掉前缀后的类名
        $relative_class = substr($class, $len);
        
        // 把命名空间前缀替换成根目录,
        // 在去掉前缀的类名中,把命名空间分隔符替换成目录分隔符,
        // 然后在后面加上.php
        $file = $base_dir . str_replace('\', '/', $relative_class) . '.php';
        
        // 如果该文件存在,就将其导入
        if (file_exists($file)) {
            require $file;
        }
    });
  • 相关阅读:
    MySQL中interactive_timeout和wait_timeout的区别
    MySQL主从环境下存储过程,函数,触发器,事件的复制情况
    Hbase的伪分布式安装
    当master down掉后,pt-heartbeat不断重试会导致内存缓慢增长
    ERROR 1010 (HY000): Error dropping database (can't rmdir './test/', errno: 17)
    基于MySQL MEB的备份恢复
    pt-heartbeat
    B树和B+树的区别
    如何在Zabbix上安装MySQL监控插件PMP
    如何部署Zabbix服务端
  • 原文地址:https://www.cnblogs.com/mzhaox/p/11288306.html
Copyright © 2020-2023  润新知