首页 > 生活服务 > 程序猿源

程序猿源

php之框架开发一

管理员 11月前 94浏览

如何快速开发一个PHP框架?

简介:

PHP是一种广泛应用于Web开发的编程语言,而开发一个自己的PHP框架可以帮助我们更高效地开发应用程序。本文将向您介绍如何快速开发一个简单的PHP框架,并提供代码示例来帮助您理解。

步骤1:创建基本目录结构

首先,我们需要创建一个基本的目录结构来组织我们的框架代码。下面是一个简单的目录结构示例:

/my_php_framework/
|-- /src/               # 框架源代码目录
|   |-- /Core/           # 框架核心类和接口
|   |   |-- /Controller/  # 控制器基类
|   |   |-- /Model/      # 数据模型基类
|   |   |-- /View/       # 视图基类
|   |-- /Plugin/         # 插件系统核心代码
|   |   |-- PluginInterface.php  # 插件接口定义
|   |   |-- PluginManager.php    # 插件管理器
|   |-- Router.php          # 路由处理器
|   |-- Database.php        # 数据库连接和查询类
|   |-- Config.php          # 配置文件加载器     
|   |-- Helper.php          # 常用辅助函数
|      |--  Bootstrap.php              # 出入口
|-- /plugins/             # 插件目录
|   |-- /PluginExample/    # 示例插件
|   |   |-- Plugin.php        # 插件主类
|   |   |-- Config.php        # 插件配置文件
|-- /vendor/               # 第三方库和依赖
|-- /public/               # 公共目录,存放入口文件
|   |-- index.php          # 应用入口文件
|-- /tests/                # 单元测试
|-- /docs/                 # 开发文档
|-- /logs/                 # 日志文件存储
|-- .gitignore              # 版本控制系统忽略文件配置
|-- composer.json           # 依赖管理配置文件
|-- LICENSE                 # 许可证文件
|-- README.md               # 项目说明文件
|-- .htaccess               # 服务器配置文件(如果是Apache)

在上述目录结构中,我们将应用程序的控制器、模型和视图分别存放在"core"目录下。配置文件存放在"config"目录下,公共资源(例如CSS和JavaScript文件)存放在"public"目录下,而第三方库和插件则存放在"vendor"目录下。

步骤2:创建自动化升级脚本

由于我要开发框架,避免不了迭代更新,所以我要有版本控制和升级包的制作,这里需要用到自动化脚本

# .github/workflows/deploy.yml

name: Create PHP Package  # 工作流程名称

on:
  push:
    branches:
      - main  # 触发条件:当代码被推送到main分支时

jobs:
  build:
    runs-on: ubuntu-latest  # 指定运行环境为Ubuntu的最新版本
    
    steps:
    - name: Checkout Source Code  # 步骤名称:检出源代码
      uses: actions/checkout@v2  # 使用actions/checkout@v2动作来检出代码

    - name: Set up PHP  # 步骤名称:设置PHP环境
      uses: shivammathur/setup-php@v2  # 使用shivammathur/setup-php@v2动作来设置PHP
      with:
        php-version: '8.2'  # 设置PHP版本

    - name: Get Changed Files  # 步骤名称:获取更改的文件
      id: changed-files  # 给这个步骤设置一个ID,以便在其他步骤中引用
      run: |
        # 使用git命令获取自上次标签以来更改的文件列表
        git diff --name-only $(git describe --tags --abbrev=0) HEAD --format='%f'
        echo "::set-output name=files::$(git diff --name-only $(git describe --tags --abbrev=0) HEAD --format='%f')"

    - name: Archive Changed Files  # 步骤名称:归档更改的文件
      if: steps.changed-files.outputs.files != ''  # 如果changed-files步骤有输出文件,则执行此步骤
      run: |
        # 使用tar命令将更改的文件打包成tar.gz格式
        tar -czf upgrade-package.tar.gz $(echo ${{ steps.changed-files.outputs.files }} | tr ' ' '\n' | grep -v '^\.$')

    - name: Upload Upgrade Package  # 步骤名称:上传升级包
      uses: actions/upload-artifact@v2  # 使用actions/upload-artifact@v2动作来上传artifact
      with:
        name: php-upgrade-package  # 给artifact命名
        path: upgrade-package.tar.gz  # 指定artifact的路径

    - name: Create GitHub Release  # 步骤名称:创建GitHub Release
      id: create_release  # 给这个步骤设置一个ID
      uses: actions/create-release@v1  # 使用actions/create-release@v1动作来创建Release
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  # 使用GitHub提供的秘钥
      with:
        tag_name: ${{ github.ref }}  # 设置Release的标签名称为当前的git ref
        release_name: Release ${{ github.ref }}  # 设置Release的名称
        draft: false  # 设置Release不是草稿
        prerelease: false  # 设置Release不是预发布

    - name: Upload Release Asset  # 步骤名称:上传Release附件
      if: steps.create_release.conclusion == 'success'  # 如果create_release步骤成功,则执行此步骤
      uses: actions/upload-release-asset@v1  # 使用actions/upload-release-asset@v1动作来上传附件
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  # 使用GitHub提供的秘钥
      with:
        upload_url: ${{ steps.create_release.outputs.upload_url }}  # 使用create_release步骤的输出作为上传URL
        asset_path: ./upgrade-package.tar.gz  # 指定要上传的文件路径
        asset_name: upgrade-package.tar.gz  # 设置上传文件的名称
        asset_content_type: application/gzip  # 设置文件的内容类型

以上就完成了 上传github的main分支时候自动从代码里面抠出升级包使用


步骤3:创建核心类文件

接下来,我们需要创建一些核心类文件,来处理框架的基本功能。以下是一些基本的核心类示例:

  • App.php:入口函数

  • Router.php:处理URL路由和请求分发

  • Controller.php:基础控制器类,处理请求和渲染视图

  • Model.php:基础模型类,用于处理数据库操作

  • View.php:基础视图类,用于渲染视图模板

在这些类文件中,我们需要实现相应的方法和功能,以便处理请求、访问数据库和渲染视图。

这里以App类为例,给出一个简单的代码示例:

<?php

namespace cqfg; // 定义命名空间

// 引入多个类,这类可能是框架的基础组件,后面我们来写
************
use Throwable; //PHP 7.0 引入了 Throwable 内置接口,它是所有错误和异常类型的基类或基接口

class App
{
    // 类属性列表,包含应用程序的运行时状态和性能指标
    public static bool $debug = false;    // 是否开启调试模式
    public static bool $cli = false;      // 是否在命令行界面运行
    public static bool $exit = false;     // 标记应用是否需要退出
    public static float $db = 0;          // 数据库操作耗时
    public static float $route = 0;       // 路由处理耗时
    public static float $frame = 0;       // 框架基础环境加载耗时
    public static float $app_ = 0;        // 应用总运行时间

    // MainApp 类型的静态属性,可为空
    private static ?MainApp $app = null;

    // 类方法列表
    static function run(): void  // 应用程序的入口方法,启动应用程序
    {
            try {
                // ...(省略具体实现)
        
            } catch (ExitApp $exit_app) {
                // 处理应用退出情况
                // ...(省略具体实现)
            } catch (Throwable $exception) {
                // 处理异常
                // ...(省略具体实现)
            } finally {
                // 清理工作,记录日志
                if (self::$app) {
                    self::$app->onRequestEnd();
                }
                // ...(省略具体实现)
            }
    }

    static function exit($msg, bool $output = false) : void  // 退出应用程序的方法
    {
        // ...(方法内的代码省略,具体实现见下文)
    }
    
    // ...(其他可能存在的方法省略)
}


这里大家要学习下php的报错机制


版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
关注微信公众号:"cq_xifan";

评论

收藏

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

Powered By 重庆饭哥 © 2014-2022 教学资源分享站 渝ICP备20005643号-1

相信有一天,理想主义终将所向披靡.

Design by © 2021 XIFAN. Powered by 重庆饭哥

站点声明: 本站转载作品版权归原作者及来源网站所有,原创内容作品版权归作者所有,任何内容转载、商业用途等均须联系原作者并注明来源。

友情链接: 官方网站 饭哥在线工具 饭哥导航 在线运行 博客交流社区 重庆艺术工程职业学院