FleaPHP 开发指南 - 4. 命名规范和目录结构

2024-01-18 08:18

本文主要是介绍FleaPHP 开发指南 - 4. 命名规范和目录结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FleaPHP 的命名规则和目录结构初看上去比较复杂,但习惯以后,你会发现这种命名规则带来许多好处。因此像 Zend Framework 也是采用同样的做法。

当然,FleaPHP 对于应用程序的命名规则和目录结构没有强制性要求。只不过采用一致的命名规则和目录结构,可以方便对应用程序维护。同时 FleaPHP 应用程序开发者之间也可以更容易的进行协作。



全局函数的命名规则

全局函数的命名规则是用“_”分隔全小写的单词。例如 get_cache()、echo_h()。同时,函数的名字采用“动词+宾语”的形式。例如 write(动词)_cache(宾语)。

不过有些全局函数为了和 PHP 中已有的类似函数保持一致,采用了不同的命名方式(顺便抱怨一下,PHP 自身的全局函数命名比较混乱,各种形式的都有)。



类的命名规则

所有 FleaPHP 自带的类,都以 FLEA_ 开头。然后根据用途命名。例如 FLEA_Controller_Action、FLEA_Helper_ImgCode。然后将类名字中的“_”替换为目录分隔符,就是这个类的定义文件所在位置。

举例:

FLEA_Controller_Action 类,保存文件为 FLEA/Controller/Action.php
FLEA_Db_TableDataGateway 类,保存文件为 FLEA/Db/TableDataGateway.php

这种命名规则和目录结构的优缺点如下:

优点:

  • 避免命名冲突
  • 根据类名字就能找到文件存放位置
  • 应用程序中可以使用 FleaPHP 的 import()、load_class() 函数方便的载入类定义文件
  • 如果使用 PHP5,可以很方便的用 __autoload() 来自动载入需要的类定义:
function __autoload($className) {    load_class($className);}?>

缺点:

  • 类名字较长,不便于输入,例如 FLEA_Com_RBAC_UsersManager
  • 也许和现有习惯不同,需要时间来适应

对于第一个缺点,使用 Zend Development Environment 或者 Eclipse 这样的 IDE 可以缓解。这些 IDE 提供强大的输入自动完成功能,通常输入类名字的开头几个字母,就会显示候选列表让开发者选择。



变量和常量命名

在 FleaPHP 中,变量分为全局变量、临时变量和模版变量三类。

  • 全局变量和常量

    全局变量和常量都使用全大写,以“_”分隔。例如 $GLOBALS['CLASS_PATH']FLEA_DIR。不过 FleaPHP 中尽量避免了使用全局变量和常量,因此一般来说不会和应用程序产生冲突。

  • 临时变量

    函数、类方法中使用的变量都是临时变量,命名规则是第一个单词小写,后续的单词第一个字母大写。例如 $requestFilters$dispatcherClass 等。

  • 模版变量

    之所以要把模版变量单独列出来,是因为不同的模版引擎对变量名有不同的规范。从我个人来说,我倾向于模版变量使用全小写单词,并以“_”分隔,例如 $latest_products_list。这样在程序里面一眼就能看出哪些变量是用于模版的。



FleaPHP 的目录结构

一个典型的 FleaPHP 应用程序具有如下的目录结构:

这个应用程序的目录主要分为 WebLibs 和 WebRoot。其中 WebLibs 保存程序的所有代码,而 WebRoot 目录下只保存用户可以访问的部分,例如 index.php 入口文件、图片、CSS 样式表和 JS 脚本。

WebLibs 下又分为 FLEA 和 YORK 两个目录。FLEA 目录保存 FleaPHP 的核心文件,而 YORK 目录保存应用程序的代码。之所以取名 YORK,是因为这个项目的公司名为 YORK。所以开发者在规划目录结构时,可以参照这种方式,为保存应用程序代码的目录取一个容易理解的名字。

WebRoot 是保存用户使用浏览器可以直接访问的内容,因此需要修改服务器或虚拟主机设置,将网站的根目录指向 WebRoot 目录。例如 www.example.com 指向 /example/WebRoot/。

这里介绍的目录结构有如下优点:

优点:

  • 代码文件放置在浏览器访问不到的地方,提高了安全性
  • 程序员和设计人员可以在不同的目录工作,降低了发生冲突的几率
  • 目录结构更清晰,容易理解

而主要的缺点就是需要修改服务器设置,将网站根目录指向 WebRoot 目录。而有些虚拟主机不允许这样做,或者需要联系服务器管理员,比较麻烦。

对于这种目录结构,放置在 WebRoot 中的 index.php 入口文件应该明确调用 import() 将 WebLibs 目录添加到类定义搜索路径中。否则 load_class() 会找不到需要的文件。

require('../WebLibs/FLEA/FLEA.php');import('../WebLibs/YORK/');....run();?>

对于虚拟主机用户,可以将 WebLibs 目录移动到 WebRoot 目录中。形成如下的目录结构:

上图中,所有文件都保存在应用程序的根目录 cdhlss 中,而代码文件保存在 libs 子目录中。其中 libs/APP 保存应用程序的代码。

相应的 index.php 需要修改为:

require('libs/FLEA/FLEA.php');import('libs/APP/');....run();?>

在实际开发中,由于 FleaPHP 并没有强制要求命名规范和目录结构。所以开发者可以继续沿用自己熟悉的方式来开发应用程序。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1349951


这篇关于FleaPHP 开发指南 - 4. 命名规范和目录结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618482

相关文章

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N