怎么样写一个自己的渣渣PHP框架(1)

gongzhiyang 6月前 243

项目地址
最近有时间,于是就想写一个框架吧!这样可以更好的了解整个框架是怎么运行的,可以更好的理解MVC模式 面向对象模式等。写的比较菜了。就当学习。哈哈哈!
进入正题:

实我还是建议初学者(特指已经学完PHP基础语法,并且了解一些开源框架MVC,再加上composer的童鞋们)写一个自己的框架。练练手!

php 有个composer包,这可是个好东西。里面什么都有。就像nodejs的npm包管理,就像python里的pip,还像什么语言里的什么什么,我就不得而知了,因为别的我比较不会…

我们先来搞明白一个简单小框架的运行流程,index.php -> 定义基础常量 -> 引入配置文件 -> 自动加载(重点)-> 路由解析(重点)-> MVC 大概类似的就是这样一个流程,然后加上composer,或者你需要的各种类库,一个轻量级,基础级的框架就诞生了,你可以取个简单响亮的名字。

开始的话你肯定要搭建php环境了。php的话要7.0以上。
先从index.php入口文件来写吧

新建一个目录,比如 /gzyCFM ,然后新建一个index.php文件,ok 入口文件建好了,简直是好的开始就是成功的一半啊。

  • Composer 中文文档。【Composer 中文文档 | Composer 中文网】
  • Packagist 是主要的 composer 存储库。它集合了可以使用Composer安装的公共PHP包。【Packagist The PHP Package Repository】

然后新建一个composer.json (如果不了解composer的童鞋可以看 ↑ 先去自行了解)

{
  "name": "php/gzyCFM",
  "description": "php/gzycmf The PHP Framework",
  "version": "1.0.0-beta",
  "keywords": ["php","php framework"],
  "require": {
    "php": ">=7.0",
    "filp/whoops":"*",
    "hassankhan/config":"0.10.0"
  },
  "repositories": {
    "packagist": {
      "type": "composer",
      "url": "https://packagist.phpcomposer.com"
    }
  }
}

composer.josn的其他参数大家自己了解一下,这里我只说require和repositories。

  1. require 的key值就是你需要告诉composer你的项目需要哪些包,value是对应包的版本号。比如我上面的,项目需要 php 并且版本应该大于等于 5.7 ,需要 “filp/whoops” 当前的最高版本(*号表示没有版本限制,默认当前最高版本),“hassankhan/config” 的 0.10.0 版本。目前就需要这些,这些包都是可以通过 Packagist.org 搜索获取。(这些包的作用后续告诉大家)。

  2. repositories 我看过一篇帖子,说这样写的话,貌似是换成国内的源,更新下载包的时候速度会比较快一些。

然后 命令行模式去目录下执行 composer install 目录中会多出一个 vendor 目录和 composer.lock 文件,composer安装(停顿一下)包有两种方法,我每次在require增加新的包,就直接执行 composer update 就OK了。虽然我可能说的比较混乱,但是这不是今天的重点,你先去google、百度,回头再说composer。嗯,就这么愉快的决定了。

之后要关键的index.php自动加载

// Autoload 自动载入
require 'vendor/autoload.php';

我刚才composer包中下载

  • “filp/whoops”:"*",

官网链接:“filp/whoops” 里详细介绍,并且有运用方法。虽然是英文但是你可以用翻译呀。大概就是,这个包是一个PHP错误处理的包。帮你再调试web程序的时候,描述代码执行过程,准确定位错误的原因及代码的位置。

在index.php文件里写

$whoops = new \Whoops\Run;
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();

然后我们故意制造一个错误:(用9除以0)

echo 9/0;

访问一下你的 index.php 看看是不是

在这里插入图片描述

  • “hassankhan/config”
    官网链接:"hassankhan/config"里有详细介绍,是一款轻量级配置文件加载器,支持PHP,INI,XML,JSON和YAML文件。

我们怎么用的呢!

在根目录先新建一个 config 目录,/gzyCFM/config 下新建 conf.php (或者conf.josn 不是说过了,"hassankhan/config"支持php,josn等等文件)

在conf.php里写:(conf.json直接写json就可以了)

return [
	"debug"		 => true,  // 是否开启调试模式
	"url_route"  => 'PATH_INFO', //PATH_INFO 普通模式
	'modules'	 => 'home',
	'controller' => 'Index',    // 默认控制器
    'action' 	 => 'run',          // 默认方法
	"template"   =>[
		'template'      => 'php',//模板默认原生php
		'suffix'        => '.php', //设置模板文件的缀 如果是smarty就是 .html
		'templateaDir'  => 'views/',//设置模板所在的文件夹
		'compiledir'    => 'runtime/HTML',//设置编译后存放放的目录
		'suffix_cache'  =>  '.php',//设置编译文件后缀
	]
];

回到index.php,定义项目根目录常量 YIN_PATH,

define("YIN_PATH",dirname(__FILE__));
define("WEB_URL","http://".$_SERVER['SERVER_NAME'].":".$_SERVER["SERVER_PORT"]."/");//域名
//echo $_SERVER['SERVER_NAME']; exit;
// Config

//echo YIN_PATH. '/data/gzycmf/config/conf.php';exit;


require 'vendor/autoload.php';
$conf = new \Noodlehaus\Config(YIN_PATH. '/config/conf.php');
echo $conf->get('debug');

访问你的index.php有没有输出 1 不就是你的 debug的值 true 吗!

写的好累呀,看个电影 放松一下也不足为奇呐。


最新回复 (0)
    • 都市菜鸟网
      2
        立即登录 立即注册 
返回
发新帖