为什么要构建自己的PHP框架?现在的PHP框架很多,当然不止PHP,即使是其他编程语言也有很多框架,这篇文章讲PHP框架构建是因为我对PHP的生态最为熟悉,但这个方法同样也适用于其他编程语言框架的构建。,用Composer开 ...
|
为什么要构建自己的 PHP 框架?
现在的 PHP 框架很多,当然不止 PHP ,即使是其他编程语言也有很多框架,这篇文章讲 PHP 框架构建是因为我对 PHP 的生态最为熟悉,但这个方法同样也适用于其他编程语言框架的构建。 框架是为了提升我们的应用开发效率,市面上有很多开源免费的框架给我们使用,我们尽可以拿来用,为什么还要自己构建一个自己的框架呢?原因就在于市面上的开源框架,是给大部分人用的,给通用项目用的,作为框架的开发者是不知道自己的框架使用者的具体业务的,所以开源框架一定是满足大部分人的需求,而且力求能够为开发者提供所有可能用到的功能。 但是对于一个商业项目或者是一个你自己要做的项目也许只能用到框架的很少一部分功能,或者是框架给你提供的东西并不是最符合你自己的需求的,你使用了框架的一部分功能,另一部分根本没用,这样使用框架首先是性能上的损失,一些你根本用不到的功能却要降低你应用的性能显然不合适的。再就是也许框架提供的功能不是你想要的,或者这个功能这个框架提供的并不是符合你需求的,又或者要使用这部分功能必须按照框架开发者制定的规范来使用,这个规范并符合你的开发哲学。 从哪开始? 各种现代编程语言都有自己的包管理工具,PHP 就是 composer ,利用它我们就可以构建属于自己的框架了,并能很好的组织我们的框架。 怎么开始? 我们该怎么开始构建我们自己的框架呢?从零开始吗?这个问题没有标准答案,如果你要做的项目要求很严格,从底层开始就要保证项目架构的最稳定可控,那么建议你从零开始。如果要求不是非常严格那么我们就从那些开发一个应用最基本需要的功能开始,这样的功能谁提供呢?PHP 有很多微框架,这些框架提供开发一个应用最基础的功能,我们可以从这里开始。 首先我们通过 {
"name": "dongm2ez/m2ez-framework",
"description": "a dongm2ez's framework",
"keywords": ["framework", "m2ez-framework"],
"license": "MIT",
"authors": [
{
"name": "dongm2ez",
"email": "dongm2ez@163.com"
}
],
"require": {}
}这就是我得到的一个 我选择 Slim 框架作为我的框架基础框架,这是一个微框架,我喜欢它,它足够简单,提供了 web 开发 和 API 开发最基础的功能,而且还有一个原因开发这个框架的作者写了一本名为《Modern PHP》的书,这本书颠覆了我对 PHP 这个语言的认知,开始喜欢并乐于使用它。 在引入这个框架之前我还要对 PHP 版本做个限制,从我使用 PHP 从 5.2 开始到现在,PHP 已经发展到 PHP 7.2 了,但是我不想再去使用低版本的 PHP,一个是 PHP 低版本马上将失去官方的支付,另一个是一些 PHP 的新特性我不能使用,而且低版本的性能也是不好的。所以我要将我的框架限制在 PHP 7.0 以上,同时我希望我的框架对中文有更好的支持。 那么我将更新我的框架 {
"name": "dongm2ez/m2ez-framework",
"description": "a dongm2ez's framework",
"keywords": ["framework", "m2ez-framework"],
"license": "MIT",
"authors": [
{
"name": "dongm2ez",
"email": "dongm2ez@163.com"
}
],
"require": {
"php": ">=7.0.0",
"ext-mbstring": "*",
"slim/slim": "^3.0"
}
}这样我就获得了一个最基础的我的框架版本,但是我还没完成,因为我们没有定义我的框架目录结构。我觉得 laravel 框架的目录划分是挺让我喜欢的,但我又不完全喜欢 laravel 的目录结构,我需要对它进行改造。 ├── app │ ├── Helpers.php │ ├── Http │ │ └── Controllers │ └── Models ├── composer.json └── tests 我这样设置我的目录结构,并更新我的 {
"name": "dongm2ez/m2ez-framework",
"description": "a dongm2ez's framework",
"keywords": ["framework", "m2ez-framework"],
"license": "MIT",
"type": "project",
"authors": [
{
"name": "dongm2ez",
"email": "dongm2ez@163.com"
}
],
"require": {
"php": ">=7.0.0",
"slim/slim": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "~6.0"
},
"autoload": {
"classmap": [
"app/Models"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
}
}这样的框架可以访问吗,显然是不行的,我们还要加一些东西让我们的框架真正可以跑起来,然后在来迭代它。 ├── app │ ├── Helpers.php │ ├── Http │ │ └── Controllers │ └── Models ├── bootstrap │ ├── app.php │ └── autoload.php ├── composer.json ├── config ├── public │ └── index.php ├── routers └── tests 我们将目录结构改造成这样,并编写一些启动框架的代码到相应的文件 // public/index.php run(); // bootstrap/app.php |
