【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 ‘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
时间: 2024-11-05 13:22:32