PHP命名规范

参考自ThinkPHP5的命名规范 目录和文件 框架核心类库的目录统一使用小写规范,但应用目录名不强制规范,驼峰法和小写+下划线均支持,看团队规范; 类库、函数文件统一以.php为后缀; 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致(包括大小写); 类名和类文件名保持一致,并统一采用驼峰法命名(首字母大写) 函数和类、属性命名 类的命名采用驼峰法,并且首字母大写,例如User、UserType,不需要添加controller、model等后缀,UserController直接更改为User; 函数的命名使用小写字母和下划线(小写字母开头)的方式,例如get_client_ip; 方法的命名使用驼峰法,并且首字母小写或者使用下划线“_”,例如getUserName,_parseType,通常下划线开头的方法属于私有方法; 属性的命名使用驼峰法,并且首字母小写或者使用下划线“_”,例如tableName、_instance,通常下划线开头的属性属于私有属性; 以双下划线“__”打头的函数或方法作为魔法方法,例如__call和__autoload; 常量和配置 常量以大写字母和下划线命名,例如APP_DEBUG和APP_MODE; 配置参数以小写字母和下划线命名,例如url_route_on; 数据表和字段 数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如think_user表和user_name字段,类似_username这样的数据表字段可能会被过滤。 应用类库命名空间规范 应用类库的根命名空间统一为app(可以设置APP_NAMESPACE更改);例如:app\index\controller\Index和app\index\model\User。

December 17, 2022 · 1 min · 19 words · jabin

接口开发规范

统一返回格式 { "code": 200, "data": { "title": "Default Api", "content": "PHPer您好,欢迎使用PhalApi!", "version": "1.1.0", "time": 1423142802 }, "msg": "" } 状态码描述 1xx 应用自定义错误 2XX 成功 200: OK。一切正常。(正常用这个即可) 201: 响应 POST 请求时成功创建一个资源。Location header 包含的URL指向新创建的资源。 202: 已接受用于处理,但处理尚未完成。 203: 部分信息 — 返回的信息只是一部分。 204: 该请求被成功处理,响应不包含正文内容 (类似 DELETE 请求)。 3XX 重定向,接口修改时适用 304: 资源没有被修改。可以使用缓存的版本。 302: 请求的数据临时具有不同 URI。 306: 不再使用,保留此代码以便将来使用。 4XX 客户机中出现的错误,影响服务器处理 400: 错误的请求。可能通过用户方面的多种原因引起的,例如在请求体内有无效的JSON 数据,无效的操作参数,等等。 401: 验证失败。 403: 已经经过身份验证的用户不允许访问指定的 API 末端。 404: 所请求的资源不存在。 405: 不被允许的方法。 请检查 Allow header 允许的HTTP方法。 415: 不支持的媒体类型。 所请求的内容类型或版本号是无效的。 422: 数据验证失败 (例如,响应一个 POST 请求)。 请检查响应体内详细的错误消息。 429: 请求过多。 由于限速请求被拒绝。 5XX 服务器中出现的错误 500: 内部服务器错误。 这可能是由于内部程序错误引起的。 501: 请求还没有被实现。比如说,我们请求一个接口来自动拒绝项目经理的要求,但是这个接口只是美好的想象,并没有被实现,这时候可以返回 501。 502: 网关错误。比如说,我们向服务器 A 请求下载葫芦娃,但是 A 其实只是一个代理服务器,他得向 B 请求葫芦娃,但是不知道为啥 B 不理他或者给他错误,这时候哦可以 A 返回 502 用来表示 B 这家伙傲娇了。 503: 服务暂时不可用。比如说,服务器正好在更新代码重启。 504:网关超时,类似 502,但是这时候是 B 不理 A,超时了 。 505:HTTP 版本不受支持,服务器不支持请求中所使用的 HTTP 协议版本。

December 16, 2022 · 1 min · 119 words · jabin

语雀Blog

源起 blog用过wp,hexo,hugo,都不甚满意,语雀的后台编辑功能是可以的,但是前端blog的展现就不适合本人,于是萌生一个语雀做后台,自己写前端站点的想法,就有了xugo-yuque 特性 自动导入语雀平台数据,支持webhook,支持每日0点更新 支持多知识库 支持模版定制,对默认模版不满意? 一套模版就几个页面,可以自己修改 连接数据库,想怎样显示就怎样显示。 对接xugo-yuque提供的接口 提供api 可以方便对接自家系统 开发app应用 支持自定义的page目录,支持相册目录 已知问题 只支持“文档类型”的知识库 不支持视频显示(语雀限制只能站内播放) api 部分(含后台)启用后要先浏览器一下blog页面才能打开。 语雀不支持外部图片,后台编辑全部都会转成语雀自己的图床,貌似做了防盗链处理。暂时通过下载图片到本地解决。 部分较长或复杂文档(如大量代码),语雀api返回的html内容会截断,导致显示不全或错位。 对语雀建议 去除图片防盗链,或者可以给用户自己设置。 添加tag支持 添加文章自定义字段,满足不同数据,以后做应用就直接用语雀做后台了,自己通过api做前端即可。 api 评论部分缺失。 通过api保存的文档,不会触发webhook,例如剪藏 使用注意 在与语雀交流过程中,语雀表示要优先保证自身产品体验,对于第3方api支持不会很及时。图片防盗链不会放开。 求人不如求己,自己想办法解决了图片防盗链和内容截断,由于api限制,所以显示体验未必能和语雀一致。但好歹能完整显示了。 数字序列使用顿号“、”,不要使用圆点“.”。 如需使用本程序,建议在语雀后台尽量使用markdown进行编写,标题前后各空一行。 语雀后台体验确实好,但是对于开放持保留态度,对于内容数据有些担心,有一天可能会被割韭菜。 安装 语雀设置 创建账号token,给予最高可读权限。并且填写到xugo-yuque的配置文件 将知识库webhook设置为http://{xugo-yuque-host}/webhook/yuque 考虑到安全,webhook路径可以在配置文件自行设置 创建数据库 将sql目录下数据库脚本导入数据库。更新数据库链接信息至xugo-yuque的配置文件 Linux(centos) 运行 nohup ./xugo-yuque start & 下载 linux-0.1.3 1、修复图片下载bug 2、自定义webhook路径,安全设置 后续计划 打赏累计超过1000元执行 1、支持将语雀markdown文档下载到本地 2、支持导入本地markdown文档,防止语雀失效 2024.11.27 由于最近一年语雀服务质量和内容变化很大,服务不稳定,数据不能导出,开放接口需要超级会员才能使用,逐放弃,本程序停更。新笔记组合为:Obsidian+Hugo,数据内容为本地md文件,备份简单,不怕数据绑架。 感谢 语雀 GoFrame 打赏 如果你喜欢,一分一毫也是对作者的鼓励(勿超10元)

December 16, 2020 · 1 min · 61 words · jabin

Mysql 性能优化教程[转]

背景及目标 厦门游家公司(4399.com)用于员工培训和分享。 针对用户群为已经使用过mysql环境,并有一定开发经验的工程师 针对高并发,海量数据的互联网环境。 本文语言为口语,非学术标准用语。 以实战和解决具体问题为主要目标,非应试,非常规教育。友情提醒,在校生学习本教程可能对成绩提高有害无益。 非技术挑战,非高端架构师培训,请高手自动忽略。 本文档在2011年7月-12月持续更新,加强了影响结果集分析的内容并增补优化实战案例若干。 Mysql 执行优化 认识数据索引 为什么使用数据索引能提高效率 关系型数据库的数据索引(Btree及常见索引结构)的存储是有序的。 在有序的情况下,通过索引查询一个数据是无需遍历索引记录的 关系型数据库数据索引的查询效率趋近于二分法查询效率,趋近于 log2(N)。 极端情况下(更新请求少,更新实时要求低,查询请求频繁),建立单向有序序列可替代数据索引。 HASH索引的查询效率是寻址操作,趋近于1次查询,比有序索引查询效率更高,但是不支持比对查询,区间查询,排序等操作,仅支持key-value类型查询。不是本文重点。 如何理解数据索引的结构 数据索引通常默认采用btree索引,(内存表也使用了hash索引)。 仅就有序前提而言,单向有序排序序列是查找效率最高的(二分查找,或者说折半查找),使用树形索引的目的是为了达到快速的更新和增删操作。 在极端情况下(比如数据查询需求量非常大,而数据更新需求极少,实时性要求不高,数据规模有限),直接使用单一排序序列,折半查找速度最快。 在进行索引分析和SQL优化时,可以将数据索引字段想象为单一有序序列,并以此作为分析的基础。涉及到复合索引情况,复合索引按照索引顺序拼凑成一个字段,想象为单一有序序列,并以此作为分析的基础。 一条数据查询只能使用一个索引,索引可以是多个字段合并的复合索引。但是一条数据查询不能使用多个索引。 优化实战范例 实战范例1: ip地址反查 资源: Ip地址对应表,源数据格式为 startip, endip, area 源数据条数为 10万条左右,呈很大的分散性 目标: 需要通过任意ip查询该ip所属地区 性能要求达到每秒1000次以上的查询效率 挑战: 如使用 between startip and endip 这样的条件数据库操作,因为涉及两个字段的between and, 无法有效使用索引。 如果每次查询请求需要遍历10万条记录,根本不行。 方法: 一次性排序(只在数据准备中进行,数据可存储在内存序列) 折半查找(每次请求以折半查找方式进行) 实战范例2:目标:查找与访问者同一地区的异性,按照最后登录时间逆序 挑战:高访问量社区的高频查询,如何优化。 查询SQL: select * from user where area=’$area’ and sex=’$sex’ order by lastlogin desc limit 0,30; 建立复合索引并不难, area+sex+lastlogin 三个字段的复合索引,如何理解? ...

April 16, 2019 · 8 min · 1606 words · jabin

React + Electron 搭建一个桌面应用[转]

当你冲这个标题点进来的时候,我猜你一定知道 React 是什么,更多详情请戳这里,就不介绍React了,一个神般存在的前端框架。另外,浏览器和移动端横行的时代,为什么还需要桌面应用?我就不解释了,反正优点很多,做为技术多学一点总没错。 Electron 简单介绍 是什么? 官网是这么介绍的: Electronis an open source library developed by GitHub for building cross-platform desktop applications with HTML, CSS, and JavaScript. Electron accomplishes this by combining Chromiumand Node.jsinto a single runtime and apps can be packaged for Mac, Windows, and Linux. 简单翻译一下就是: ​Electron是一个由 GitHub 开发的开源库,通过将 Chromium) 和Node.js组合并使用 HTML,CSS 和 JavaScript 进行构建 Mac,Windows,和 Linux 跨平台桌面应用程序。 隐藏意思: 让前端开发者快乐简单拥抱桌面应用! 原理是? 上面已将说了,Electron通过将 Chromium和 Node.js组合到单个 runtime 中来实现的。 node.js: 如果你不知道 node.js,那还等什么快戳这里,看一看世界上最温柔可爱的语言。它借助于 Google 的 V8 引擎,Node.js是一个能够在服务器端运行 JavaScript 的开放源代码、跨平台 JavaScript 运行环境,更多解释请戳维基百科。 ...

November 29, 2018 · 3 min · 542 words · jabin