编写一个简易符合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

  

posted @ 2016-09-13 10:12  NickBai  阅读(303)  评论(0编辑  收藏  举报