# DuckPhp
[English](README.md) | [中文](README-zh-CN.md)
[toc]
***v1.2.12版***
1.2.12 版本增加了新的开发范式。待文档
作者QQ: 85811616
官方QQ群: 714610448
Gitee 仓库地址:https://gitee.com/dvaknheo/duckphp
Github 仓库地址:https://github.com/dvaknheo/duckphp
## 一、教程
[**快速入门**](docs/tutorial-quickstart.md) ,快速入门页面。
[**文档索引页**](docs/index.md) ,所有文档索引页面,所有文档的集合入口
### 直接运行演示
```
cd template
php ./duckphp-project run
```
### Composer 安装
```
composer require dvaknheo/duckphp # 用 require
./vendor/bin/duckphp new --help # 查看有什么指令
./vendor/bin/duckphp new # 创建工程
./vendor/bin/duckphp run # --host=127.0.0.1 --port=9527 # 开始 web 服务器
```
不建议使用命令行的 web 服务器, 你把 nginx 或 apache 的 document_root 设置为 public 目录按常规框架调整即可。
DuckPhp 也支持在子目录里使用,同时也支持无 path_info 配置的 web 服务器。
## 二、DuckPhp 是什么
DuckPhp 的名字来源:
`Duck Typing` If it walks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.
`鸭子类型`,这东西看起来像鸭子,叫起来像鸭子,所以就是鸭子。
起初,这是是想搞个简单的 PHP Web 简单框架 。现在是使用方式简单,实际方式不简单。
DuckPhp 的版本历程
+ 1.0.\* 系列版本是前身 DNMVCS 单文件模式的版本
+ 1.1.\* 系列版本是前身 DNMVCS 拆分成多文件的版本
+ 1.2.\* 系列版本是改名 DuckPhp 后的版本,随着思想的变化,或许会有大的变更
+ 1.3.\* 系列版本将是计划开始有人大规模使用后的稳定版本,将会对历史负责了。
## 三、DuckPhp 的理念
**业务层**。通常的 Model,Controller,View 少了一层。而因为这种缺层,导致了很多很糟糕的场景。你会发现很多人在 Contorller 里写一堆代码,或者在 Model 里写一堆代码。
这个层。有人称呼 Service ,有人称呼 Logic 。我最初的时候称呼为 App ,很长时间内我都称为 Service 。现在,我称呼为 Business 业务层。之所以改过来, Business 就是业务的意思啊。不用多想。 而且现在 Service 服务 这个层被用滥了。现在第三方的平台过来的东西才叫 Service ,业务范围之内的,就叫 Business 吧。Service 给人的感觉是业务需要的服务,不能完成一个功能。
所以,Business 按业务走,Model 层按数据库走,Controller 层按 URL 地址走,View 按页面走,这就是 DuckPhp 的理念。
DuckPhp 的最大意义是思想,只要思想在,什么框架你都可以用。
你可以不用 DuckPhp 实现 Controller-Business-Model 架构。
只要有这个思想就是理念成功了。
## 四、DuckPhp 的优点
#### 1. 可扩展
DuckPhp 可以把你的工程直接插入其他工程,不用修改。 你不需要在 DuckPhp 工程上做二次开发。
DuckPhp 不限制你的工程的命名空间固定为 `app` 。
DuckPhp 很容易嵌入其他 PHP 框架。根据 DuckPhp 的返回值判断是否继续后面其他框架。
DuckPhp 支持扩展。这些扩展可独立,不一定非要仅仅用于 DuckPhp 。
#### 2. 全组件可替换
作为一个现代的 PHP 库, 全组件可替换是必须的。
DuckPhp 用可变单例方式,解决了**系统的调用形式不变,实现形式可变**,不需要魔改来修复系统漏洞。而其他框架用的 IoC,DI 技术则复杂且不方便调试。
#### 3. 高可靠性,无依赖
DuckPhp 无第三方依赖,你不必担心第三方依赖改动而大费周折。**不需要引入101 个第三方包,就能工作**,稳定性完全可控。
如果对默认实现不满,你也可以很容易改用需要第三方依赖的实现。
比如 DuckPhp 的数据库类很简洁,而且,你可以轻易方便的替换。
#### 4. 超低耦合
DuckPhp 耦合松散,扩展灵活方便,魔改容易。
DuckPhp 可以做到你的应用和 DuckPhp 的系统代码只有一行关联。 这个是其他 PHP 框架目前都做不到的。你的业务代码,基本和 DuckPhp 的系统代码无关。你只要研究业务代码,不要研究框架代码。
DuckPhp 的 Controller 切换容易,独立,和其他类无关,简单明了。
DuckPhp 的路由也可以单独抽出使用。
#### 5. 简洁
DuckPhp 以库方式引入,所以 DuckPhp 工程骨架不像其他框架那样一大堆不可删除的文件
DuckPhp 框架的设计原则:这东西非得框架自带么,不自带行么。
DuckPhp 的配置基本都是使用默认方式。 不需要一大堆的配置文件。
DuckPhp 代码简洁,不做多余事情。最新版本默认 demo 运行根据 CodeCoverage 覆盖统计, 只需要行数 376 / 4381 (v1.2.13-dev) 执行行数/总可执行行数 。
DuckPhp 的应用调试非常方便,堆栈清晰,调用 debug_print_backtrace(2) 很容易发现。那些用了中间件的框架的堆栈很不清晰。
DuckPhp 各组件是无直接引用的,所以 var_dump() 能看出来。
DuckPhp/Core/App 是 DuckPhp 的子框架。有时候你用 DuckPhp/Core/App 也行。类似 lumen 之于 Laravel 。
#### 6. 灵活自由
DuckPhp 支持全站路由,还支持局部路径路由和无 PATH_INFO 路由,不需要配服务器也能用。 可以在不修改 Web 服务器设置(如设置 PATH_INFO)的情况下使用,也可以在子目录里使用。
DuckPhp 支持 composer。无 composer 环境也可运行。DuckPhp 是 Composer 库,不需要单独的脚手架工程。
#### 7. 最小惊讶原则(Principle of least astonishment)
DuckPhp 遵守最小惊讶原则,尽量避免一下常见问题:
“这东西从哪里来的,怎么就出现。这东西能干什么,我删除不行么。”
避免了注解之类不知道从哪里冒出来的东西。
#### 8. 全覆盖单元测试
DuckPhp 因为作者强迫症,每次发布都是通过全代码覆盖的测试,因此有很大健壮性。
#### 9. 区分使用角色
DuckPhp 的使用者角色分为 `业务工程师`和`核心工程师`。
`业务工程师` 只需要要研究业务代码。
`核心工程师` 才需要研究做系统核心代码。
#### 10. 其他优点
DuckPhp 无侵入,杜绝全局函数冲突引发的问题
DuckPhp 工程层级分明,不交叉引用。
DuckPhp 的类尽量无状态。
其他还有更多说到的优点,用到的时候会觉得精妙。
DuckPhp 有扩展能做到禁止你在 Controller 里直接写 sql 。有时候,框架必须为了防止人犯蠢,而牺牲了性能。但 DuckPhp 这么做几乎不影响性能。
DuckPhp 通过 WorkermanHttpd 扩展,支持 workerman 。不需要改工程代码,将来也支持 更多其他平台。
## 五、DuckPhp 不做什么
* ORM ,和各种屏蔽 sql 的行为,根据日志查 sql 方便多了。 自己简单封装了 pdo 。你也可以使用自己的DB类。 你也可以用第三方ORM(教程就有使用 thinkphp-db 的例子。[链接](docs/tutorial-db.db))
* 模板引擎,PHP本身就是模板引擎。
* Widget , 和 MVC 分离违背。
## 六、理解 DuckPhp 的原则
DuckPhp 工程层级关系图
```text
/-> View
Controller --> Business ---------------> Model
\ \ \ / \
\ \ \--> Service --------> ModelEx --> ModelHelper
\ \ \
\ ---------------->(Business)Helper
\-->(Controller)Helper
```
![arch_full](docs/arch_full.gv.svg)
* Controller 按 URL 入口走 调用 View 和 Business
* Business 按业务走 ,调用 model 和其他第三方代码。
* Model 按数据库表走,基本上只实现和当前表相关的操作。
* View 按页面走
* 不建议 Model 抛异常
1. 如果 Business 业务之间 相互调用怎么办?
添�
没有合适的资源?快使用搜索试试~ 我知道了~
DuckPhp 是一个 PHP 框架 回归 PHPer 的简单化
共409个文件
php:275个
md:112个
txt:6个
0 下载量 91 浏览量
2024-06-01
12:02:23
上传
评论
收藏 476KB ZIP 举报
温馨提示
一、教程 快速入门 ,快速入门页面。 文档索引页 ,所有文档索引页面,所有文档的集合入口 直接运行演示 cd template php ./duckphp-project run Composer 安装 composer require dvaknheo/duckphp # 用 require ./vendor/bin/duckphp new --help # 查看有什么指令 ./vendor/bin/duckphp new # 创建工程 ./vendor/bin/duckphp run # --host=127.0.0.1 --port=9527 # 开始 web 服务器 不建议使用命令行的 web 服务器, 你把 nginx 或 apache 的 document_root 设置为 public 目录按常规框架调整即可。 DuckPhp 也支持在子目录里使用,同时也支持无 path_info 配置的 web 服务器。
资源推荐
资源详情
资源评论
收起资源包目录
DuckPhp 是一个 PHP 框架 回归 PHPer 的简单化 (409个子文件)
doc.css 5KB
duckphp 675B
.env 12B
.gitignore 71B
.gitignore 14B
.gitignore 14B
.gitignore 14B
duckphp.gv 14KB
index.html 2KB
duckphp.jpg 58KB
composer.json 1KB
LICENSE 1KB
options.md 33KB
tutorial-tutorial.md 27KB
README.md 18KB
tutorial-general.md 16KB
tutorial-quickstart.md 12KB
tutorial-helper.md 12KB
index.md 10KB
DuckPhp.md 8KB
Core-KernelTrait.md 7KB
Core-Route.md 7KB
Core-CoreHelper.md 5KB
Core-SuperGlobal.md 5KB
tutorial-db.md 4KB
tutorial-route.md 4KB
Ext-StrictCheck.md 4KB
Helper-ControllerHelperTrait.md 4KB
Component-RouteHookRouteMap.md 4KB
Db-Db.md 4KB
Core-SystemWrapper.md 3KB
tutorial-exception.md 3KB
Ext-JsonRpcExt.md 3KB
Helper-AppHelperTrait.md 3KB
Core-App.md 3KB
Core-Console.md 3KB
Core-Functions.md 3KB
Component-DbManager.md 2KB
tutorial-extension.md 2KB
Core-AutoLoader.md 2KB
FastInstaller-SqlDumper.md 2KB
Ext-EmptyView.md 2KB
Foundation-SimpleModelTrait.md 2KB
Component-Command.md 2KB
Ext-CallableView.md 2KB
Component-Pager.md 2KB
Ext-Misc.md 2KB
Core-View.md 2KB
tutorial-foundation.md 2KB
Ext-MiniRoute.md 1KB
Core-ExceptionManager.md 1KB
Component-RouteHookPathInfoCompat.md 1KB
tutorial-console.md 1KB
Component-DuckPhpInstaller.md 1KB
Ext-RouteHookApiServer.md 1KB
Core-Logger.md 1KB
tutorial-support.md 1KB
FastInstaller-FastInstaller.md 1KB
Component-RouteHookRewrite.md 1KB
HttpServer-HttpServer.md 1KB
Core-ComponentBase.md 1KB
Core-EventManager.md 1KB
Ext-JsonView.md 1KB
Component-GlobalAdmin.md 1KB
Helper-BusinessHelperTrait.md 1KB
Ext-ExtendableStaticCallTrait.md 1KB
Component-RedisManager.md 1KB
Foundation-SimpleExceptionTrait.md 1015B
Component-RedisCache.md 1013B
Core-Runtime.md 984B
Component-RouteHookResource.md 982B
Core-PhaseContainer.md 957B
index.md 935B
tutorial-event.md 921B
Ext-MyMiddlewareManager.md 916B
Component-ExtOptionsLoader.md 885B
Helper-ModelHelperTrait.md 884B
Component-PhaseProxy.md 871B
Ext-StaticReplacer.md 867B
Foundation-SimpleSessionTrait.md 864B
Component-RouteHookCheckStatus.md 857B
Ext-RouteHookManager.md 823B
Ext-MyFacadesAutoLoader.md 735B
Component-GlobalUser.md 715B
Ext-RouteHookFunctionRoute.md 714B
Component-Configer.md 687B
Db-DbAdvanceTrait.md 650B
Component-Cache.md 616B
Ext-AutoReadLineConsole.md 608B
Foundation-SimpleSingletonTrait.md 604B
Core-SingletonTrait.md 598B
Ext-HookChain.md 596B
GlobalUser-GlobalUser.md 549B
DuckPhpAllInOne.md 549B
FastInstaller-Supporter.md 545B
Ext-RouteHookDirectoryMode.md 531B
GlobalAdmin-AdminActionInterface.md 530B
GlobalAdmin-GlobalAdmin.md 525B
FastInstaller-DatabaseInstaller.md 518B
GlobalUser-UserActionInterface.md 514B
共 409 条
- 1
- 2
- 3
- 4
- 5
资源评论
阿尔法星球
- 粉丝: 1358
- 资源: 240
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功