PHP 設計模式 筆記與總結(2)開發 PSR-0 的基礎框架

【PSR-0 規範的三項約定】:php

① 命名空間必須與絕對路徑一致框架

② 類名的首字母必須大寫ui

③ 除入口文件外,其餘".php"必須只有一個類(不能有可執行的代碼)spa

 

【開發符合 PSR-0 規範的基礎框架】:code

① 所有使用命名空間blog

② 全部 PHP 文件必須自動載入,不能有 include/require開發

③ 單一入口string

初始目錄:io

其中function

index.php 入口文件

App 放置全部和業務邏輯相關的代碼

Public 放置公共類文件(貌似 Public 會引發衝突,因此文件夾更名爲 Common)

而後在項目文件夾下添加幾個文件:

其中 Common/Loader.php 實現文件的自動載入功能,代碼以下:

<?php
/*
    實現文件自動載入功能
 */
namespace Common;

class Loader{
    static function autoload($class){
        //var_dump($class);//string 'Common\Object' (length=13)
        //$file = BASEDIR.'/'.str_replace('\\', '/', $class).'.php';
        //var_dump($file);//string 'D:\practise\php\design\psr0/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 App\Controller\Home;

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 的自動載入裏

Common\Object::test();
App\Controller\Home\Index::test();

頁面輸出:

Common\Object::test
App\Controller\Home\Index::test
相關文章
相關標籤/搜索