编写一个简易符合PSR-0规范的php框架
php标准组织出台了一系列的标准,来规范php的开发。今天我们来看看PSR-0的具体规范是什么,并且根据这个规范开发一个简单的框架出来。
[1]命名空间必须与绝对路径一致
[2]类名首字母必须大写
[3]除去入口文件外,其他".php"必须只有一个类
[4]php类文件必须自动载入,不采用include等
[5]单一入口
先看一下我的代码组织框架:
根据现在的大多数框架的约定而来,我将单入口放在public文件夹下,同时放入.htaccess文件,来重置访问。在App文件夹下放入.htaccess文件来屏蔽非法访问。
public 文件下的.htaccess
1 <IfModule mod_rewrite.c> 2 Options +FollowSymlinks -Multiviews 3 RewriteEngine On 4 5 RewriteCond %{REQUEST_FILENAME} !-d 6 RewriteCond %{REQUEST_FILENAME} !-f 7 RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] 8 </IfModule>
App 文件夹下的 .htaccess
1 deny from all
单入口 文件 index.php
1 <?php 2 // +---------------------------------------------------------------------- 3 // | newframework 框架 4 // +---------------------------------------------------------------------- 5 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) 6 // +---------------------------------------------------------------------- 7 // | Author: NickBai <1902822973@qq.com> 8 // +---------------------------------------------------------------------- 9 10 define( 'APP_PATH', __DIR__ ); 11 12 require __DIR__ . '/../Core/Loader.php'; 13 14 spl_autoload_register( "\\Core\autoload" ); //注册自动加载 15 16 Core\Newframework::run(); //启动框架
Core 文件夹下的自动加载文件 Loader.php
1 <?php 2 // +---------------------------------------------------------------------- 3 // | newframework 框架 4 // +---------------------------------------------------------------------- 5 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) 6 // +---------------------------------------------------------------------- 7 // | Author: NickBai <1902822973@qq.com> 8 // +---------------------------------------------------------------------- 9 10 namespace Core; 11 12 function autoload( $class ) 13 { 14 require str_replace("\\", "/", APP_PATH . '/../' . $class . '.php'); 15 }
Core 文件夹下的 框架核心文件 NewFramework.php
1 <?php 2 // +---------------------------------------------------------------------- 3 // | newframework 框架 4 // +---------------------------------------------------------------------- 5 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) 6 // +---------------------------------------------------------------------- 7 // | Author: NickBai <1902822973@qq.com> 8 // +---------------------------------------------------------------------- 9 10 namespace Core; 11 12 use App\frontend\Controller; 13 14 class NewFramework 15 { 16 17 public static function run() 18 { 19 $c = isset( $_GET['c'] ) ? $_GET['c'] : 'Index'; 20 $a = isset( $_GET['a'] ) ? $_GET['a'] : 'index'; 21 22 $controller = "App\\Controller\\" . $c; //拼装上控制器的命名空间 23 24 $obj = new $controller(); 25 $obj->$a(); 26 } 27 }
Controller文件夹下的 Index.php 测试文件
1 <?php 2 // +---------------------------------------------------------------------- 3 // | newframework 框架 4 // +---------------------------------------------------------------------- 5 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) 6 // +---------------------------------------------------------------------- 7 // | Author: NickBai <1902822973@qq.com> 8 // +---------------------------------------------------------------------- 9 10 namespace App\Controller; 11 12 class Index 13 { 14 15 public function index() 16 { 17 header('Content-Type: text/html; charset=utf-8'); 18 echo "<h1>hello world ∶) </h1>"; 19 } 20 }
根据自己项目所在的文件夹,配置一下vhosts.conf
<VirtualHost *:80>
DocumentRoot "D:\WWW\newframework\Public"
ServerName www.ct.com
</VirtualHost>
重启apache , 配置 hosts
127.0.0.1 www.ct.com
浏览器访问, www.ct.com
声明:本文内容仅是本人学习的记录,不保证在项目中可用,若引用此代码导致了严重后果,本人不承担任何法律责任。