• PHP 设计模式 笔记与总结(2)开发 PSR-0 的基础框架


    【PSR-0 规范的三项约定】:

    ① 命名空间必须与绝对路径一致

    ② 类名的首字母必须大写

    ③ 除入口文件外,其他".php"必须只有一个类(不能有可执行的代码)

    【开发符合 PSR-0 规范的基础框架】:

    ① 全部使用命名空间

    ② 所有 PHP 文件必须自动载入,不能有 include/require

    ③ 单一入口

    初始目录:

    其中

    index.php 入口文件

    App 放置所有和业务逻辑相关的代码

    Public 放置公共类文件(貌似 Public 会引起冲突,所以文件夹改名为 Common)

    然后在项目文件夹下添加几个文件:

    其中 Common/Loader.php 实现文件的自动载入功能,代码如下:

    <?php
    /*
        实现文件自动载入功能
     */
    namespace Common;
    
    class Loader{
        static function autoload($class){
            //var_dump($class);//string 'CommonObject' (length=13)
            //$file = BASEDIR.'/'.str_replace('\', '/', $class).'.php';
            //var_dump($file);//string 'D:practisephpdesignpsr0/Common/Object.php' (length=45)
            
            require BASEDIR.'/'.str_replace('\', '/', $class).'.php';
        }
    }

    Common/Object.php :

    <?php
    namespace Common;
    
    class Object{
        static function test(){
            echo __METHOD__,'<br>';
        }
    }
    //除了Object类之外,不得有任何可执行的语句

    App/Controller/Home/Index.php:

    <?php
    namespace AppControllerHome;
    
    class Index{
        static function test(){
            echo __METHOD__,'<br>';
        }
    }

    运行入口文件 index.php,则会自动加载 App/Controller/Home/Index.php 和 Common/Object.php

    <?php
    define('BASEDIR',__DIR__); //定义根目录常量
    include BASEDIR.'/Common/Loader.php';
    spl_autoload_register('\Common\Loader::autoload'); //把autoload 注册到php 的自动载入里
    
    CommonObject::test();
    AppControllerHomeIndex::test();

    页面输出:

    CommonObject::test
    AppControllerHomeIndex::test
  • 相关阅读:
    Mysql源码学习——Connection Manager
    MySQL源码学习——MDL字典锁
    Mysql源码学习——用户认证原理与实现
    Mysql源码学习——Thread Manager
    你真的了解如何登录MySQL么?
    CSDN密码库窥视各大数据库性能
    Mysql源码学习——没那么简单的Hash
    How to use NoSQL in MySQL
    Oracle的聚簇也Hold不住了
    Python 错误解决方法
  • 原文地址:https://www.cnblogs.com/dee0912/p/4403933.html
Copyright © 2020-2023  润新知