php gerr 统一的错误处理 v0

iwebshop商城系统在商品(货品)库存量上的设计缺点 公司要做一个商城,选用了iwebshop这套开源PHP商城系统,在检查其对商品库存量的操作时,发现iwebshop并没有对库存量操作做设计。 在需要做库存操作时(添加,减少),只是简单地用update语句set一下商品或货品表的库存字段。 当用户把商品加入购物车时,会检查一下商品的库存量,但不会修改库存量,这一步没什么问题,相关的代码在: /classes/cart.php # ge 阅读详情
一般统一的错误处理机制是使用[异常],PHP也提供了异常的功能。但异常对概念及知识面都有要求,才能用好,为避免复杂,所以不使用异常作为统一的错误处理。

网站程序的错误处理,最常用的就是中断程序执行,显示给用户一个提示框。比如在控制器中使用 showmessage() 进行错误提示。所以,在控制器中直接使用 showmessage() 中提示即可。

不过,showmessage() 并不适合在类方法及函数中使用,因为有时调用者需要自己对错误进行处理,比如,错误提示使用 JS 的 alert() 弹出,而不是显示一个 html 页面。因此,要统一的是类方法中及函数中的错误处理。

保守的写法是函数返回 true 或 false ,并通过比如传地址的参数传递错误信息:
bool func_name(& $error)
类方法则在类中定义一个 get_error() 之类的方法返回最后一次错误信息。
但是,当出现多层调用时,比如 调用者 -> A() -> B() -> C() ,在 C 函数中出现错误,这种方式要传递错误信息就很麻烦了:B() 要处理并兼容 C() 的错误处理,A() 要兼容 B() 的错误处理。
只有异常才很“自然”地支持错误信息的向上传递,手动模拟的向上传递代码写起来都很麻烦,不愿意写。

网站程序的错误处理,就是想在发生错误时默认就给用户一个提示并中断程序执行,并且当调用者需要自定义如何处理错误时允许调用者自定义。
所以,统一的错误处理就是默认直接对用户进行中断提示,比如数据库插入错误,又允许调用者需要的时候可以自定义处理错误,比如使用 JS 弹出错误信息。
于是,引入 gerr 类统一网站程序的错误处理:

gerr 类位于 /include/gerr.class.php ,类名为 gerr ,所有方法都为静态方法,无需也无法实例化。
当方法或函数中出现错误时,调用 gerr::error() 设置错误信息并返回 false 。
默认 gerr::error() 会调用 showmessge() 进行错误提示。
当调用者需要自定义处理错误时,可以调用 gerr::func_set() 设置一个自定义的错误处理函数,gerr::error() 便会调用调用者设置的错误处理函数进行错误处理。

一般来说错误处理方式都是由控制器决定的,所以 gerr::func_set() 一般是在控制器中调用。可以使用 gerr::func_reset() 把错误处理函数重置为默认函数。

在方法和函数中,可以使用 gerr::check() 检查是否已发生错误(一般发生错误都需要中断程序执行,不中断继续执行只会发生更多的错误),防止已发生的错误未被处理。

若类方法或函数使用“流程”的形式组织(比如要先 fopen 后才能 fwrite),在流程开始时调用 gerr::start() 让 gerr 进行流程的初始化,在流程成功完成后调用 gerr::end() 通知 gerr 流程已结束。

可以使用 gerr::get() 取得错误信息。

一个使用 gerr 的函数示例:

function myerr()
{
if (false)
{
gerr::error('发生错误了', __FILE__, __LINE__, __FUNCTION__);
return false;
}
return true
}

COMSOL仿真避坑指南:列管反应器模拟中多孔介质与化学反应设置的5个常见错误 本文详细解析了COMSOL仿真中列管反应器模拟的5个常见错误,包括多孔介质模型选择、化学反应接口配置、对流扩散方程处理、薄层热阻设置及网格独立性验证。特别针对多孔介质与化学反应设置的误区,提供了实用的判断标准和修正方法,帮助工程师避免计算偏差,提升仿真精度。 阅读详情

相关推荐

强化学习 之 Actor Critic

简介 Actor Critic是一种结合体算法: (1)Actor 的前生是 Policy Gradients,这能让它毫不费力地在连续动作中选取合适的动作,而 Q-learning 做这件事会瘫痪; (2)Critic 的前生是 Q-learning 或者其他的 以值为基础的学习法,能进行单步更新,而传统的 Policy Gradients 则是回合更新,这降低了学习效率。 算法思想 Actor...

Test_tju的博客 811

R语言中error的判断

对错误的判断主要利用try()函数 1.将可能会报错的命令行放到try()函数中,并将其赋值到一个变量名fit(可以是任意变量名)中 2.如果有错误,将fit将称为一个类型为“try-error”的变量 3.可以用R ‘try-error’ %in% class(fit)放置在if()函数中进行判断 4.try() 函数一般与next 和 break 进行联用,next跳过本次循环,break跳出...

辉的博客 6176

FPGA网络调试实战:基于88E1111和DP83867两款PHY芯片的SGMII-UDP数据回环对比与避坑指南

本文深入对比了88E1111与DP83867两款PHY芯片在SGMII-UDP数据回环中的性能差异,涵盖硬件设计、Vivado工程配置及调试技巧。通过实测数据揭示DP83867在吞吐量、延迟和功耗方面的优势,并提供FPGA网络调试中的常见问题解决方案,助力工程师高效完成项目开发。

weixin_31682031的博客 384

php 设置统一处理错误,统一的PHP错误处理理论

我建议去“异常”的方式。当有用户错误时抛出异常,您可以将php错误转换为异常,如下所示:function exception_error_handler($errno, $errstr, $errfile, $errline ) {throw new ErrorException($errstr, 0, $errno, $errfile, $errline);}set_error_handler(...

weixin_34602954的博客 369

如何理解Apollo模型参考自适应控制MRAC

最近有了解到百度无人驾驶Apollo项目中的横向控制有用到MRAC(Model Reference Adaptive Control),于是便详细研究了一下这个控制方法,在此总结一下心得。 什么是MRAC MRAC控制系统的基本结构图如下所示: 它由两个环路组成,由控制器和受控对象组成内环,这一部分称之为可调系统,由参考模型和自适应机构组成外环。实际上,该系统是在常规的反馈控制回路上再附加一个参考模型和控制器参数的自动调节回路而形成。在该系统中,参考模型的输出或状态相当于给定一个动态性能指标,(通常,参考模

zmhzmhzm的博客 6480

Moltbot 超详细安装使用教程(初学者版)

你在外面逛街,用微信/Telegram 发消息说"帮我查一下明天的天气"它立刻帮你查好并回复你说"帮我在电脑上新建一个文件夹叫'工作文档'"它真的帮你在电脑上创建了这就是 Moltbot ——一个能真正帮你干活的 AI 助手。API Key 就像是一把"钥匙",让 Moltbot 能够使用 AI 服务。

weixin_51040479的博客 2014

PHP错误及异常统一处理

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34004750的博客 628

强网杯Web题ezphp解题全记录:利用PHP反序列化与条件竞争拿下服务器

本文详细解析了强网杯Web题目ezphp的解题过程,通过PHP反序列化与条件竞争漏洞的组合利用,成功获取服务器权限。文章深入剖析了反序列化链的构造、文件上传绕过技巧以及条件竞争的实际应用,为CTF选手和Web安全研究者提供了宝贵的实战经验。

weixin_29006187的博客 376

常见错误码及定义

常见错误码及定义   错误码暂定都是5位数字,并配有相应的英文解释 错误码为 0 表示成功,其他都表示错误 错误码按模块按功能场景分级分段,前三位错误码表示模块,第四位表示模块下的功能。举例,商城系统里有交易模块和商品模块,则可以这样划分:401开头的表示交易模块,402开头的表示商品模块,4011开头的表示交易模块里的下单场景需要用到的错误码,4021表示商品模块下的添加商品场景里需要...

xiang__liu的博客 2万+

本地如何安装midscene.js运行环境

手把手教你本地安装midscene.js运行环境

实践助梦想成长 2608

使用 STM32F7 和 TensorFlow Lite 开发低功耗人脸识别设备

我们讨论了 STM32F7 的特点和能力,TensorFlow Lite 在 STM32F7 上的应用,以及一些降低功耗的优化技术。- 准备模型:选择合适的人脸识别模型,在 TensorFlow 中进行训练和导出,并使用 TensorFlow Lite 转换为适用于 STM32F7 的量化模型。请注意,上述代码仅展示了如何加载和运行 TensorFlow Lite 模型的方法,实际应用中需要集成人脸检测和识别模型,并根据实际需求进行相应的输入和输出处理。结合这两个工具,我们可以开发出低功耗的人脸识别设备。

weixin_66608063的博客 2586

【TP5项目统一规范】对于错误码统一使用

author:咔咔 wechat:fangkangfk 在这篇文章中我们写了错误码怎么使用,这篇文章主要写统一用法 https://mp.youkuaiyun.com/postedit/85006633 这篇文章是针对后台处理的 这是俩个公共方法,看不明白的点击上边链接。里边有详细说明 就用这个方法作为案例: 无论参数错误,还是数据异常都直接返回,在需要返回数据的时候...

咔咔博客 1437

YOLO26模型应用过程中的报错处理及疑问解答,涉及环境搭建、模型训练、模块改进、论文写作

本文记录了YOLO26模型的这一系列过程中可能发生的问题,以及大家非常关心的问题,这里统一做了一个记录和解答。

Limiiiing的博客 241

微信统一支付接口返回“签名错误”的可能原因

在调试微信支付的“统一下单”接口的时候一直遇到“签名错误:<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名错误]]></return_msg></xml> 在调试微信支付的“统一下单”接口的时候一直遇到“签名错误”。网上查找了各种资料,一般可能是以下几个问题,如果大家出现此错误的话不妨挨个排查,以免浪费时间

SakuraLLj的专栏 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

php所有错误,PHP的全局错误处理详解

本文目的PHP的全局错误处理,在开发项目的时候很有用,可以帮助开发者快速定位一些问题,提高工作效率。默认情况下,全局错误会直接输出,但是最近开发时使用的一个框架库对全局错误处理进行了设定,导致很多错误信息没有输出,在定位问题上有一定的耗时。所以,研究了一下此库的实现,发现它设定了error_reporting和set_error_handler,导致此现象。现在记录一下这两个函数的用法,作为备忘录...

weixin_42382703的博客 453

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【PHP服务类】错误码处理

author:咔咔 wechat:fangkangfk 这里用tp5作为案例: 配置全局配置文件 定义钩子文件 并使用Config获取错误码配置,并且定义成常量 配置钩子在应用初始化运行 在公共文件获取错误码对应的数据 使用方法用一个登录案例 这块就是接收参数,将参数传递给server层处理 所有验证都在serve...

咔咔博客 1263

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【异常和错误】PHP的异常和错误处理【原创】

【异常和错误】PHP的异常和错误处理

一直加班的程序猿 3256

php异常结束,PHP错误及异常统一处理

php中错误及异常的统一收集并处理,主要就是用到3个内部方法:1. register_shutdown_function(callable $callback [, mixed $parameter [, mixed $... ]) //php程序执行完成后执行的函数它执行机制是:当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候它是从内存中调用,不是从PHP页面中调用,所以在此回...

weixin_35408656的博客 279

PHP 单一入口的特有作用

在说单一入口之前,先说说多入口。Discuz!, PHPCMS 2008, DedeCMS 都是采用多入口的结构。 多入口,即通过访问不同的 php 文件运行对应的功能。如: /index.php - 网站首页 /show.php?id=1 - 内容页 /list.php?page=2 - 列表页 /login.php - 用户登录页 …… 多入口都是通过包含

朱健强的blog 天行健 君子以自强不息 5207

PHP 用什么代替 echo exit 的调试方法

想当年单枪匹马写代码的时候,用 echo+exit 的方法调试程序,效果很不错。但后来工作之后,在公司的服务器上运行着一套程序,在开发用的机上也运行着同一套程序,在开发时还是可以用 echo+exit 的方法调试,调试完后再放上服务器上。但因为是不同的机子,在开发时测试无问题可能上到服务器上就有问题了,于是必须调试服务器上的程序。但服务器上的程序是24小时对外公开的,不能把整个程序直接 exit

朱健强的blog 天行健 君子以自强不息 3427

phpcms2008 内容模型说明

cms 通过内容模型功能实现了在后台即可管理文章数据表的功能。内容模型是一个 cms 最基本的功能。 每个内容模型对应一张数据表,添加一个内容模型就会添加一张数据表,删除一个内容模型就会删除一张数据表。 模型与数据表的对应规则是:数据表名=表前序 + c_ + 模型定义的表名。 对应的数据表就是 phpcms2008_c_jieju 在后台可以管理模型数据: 模型

朱健强的blog 天行健 君子以自强不息 3091

phpcms2008, phpcmsV9, yaf, ThinkPHP, QeePHP, CodeIgniter, Zend Framework 目录结构小结

说明: 本文希望通过查看一些开源的 PHP 项目和 PHP 框架发现有利于模块化的项目目录结构规则。 # PHPCMS 2008 admin ——核心模块后台控制器      * templates ——核心模块后台模板 data ——文件缓存目录 images ——css, js, jpg 等文件目录 include ——核心模块定义类文件。      * adm

朱健强的blog 天行健 君子以自强不息 2743

手动安装图度注意事项

图度主页 https://www.tudu.im/ https://github.com/OrayDev/tudu-web   #Cookie及端口问题: Setcookie 函数第5个参数域名部份。不能加入端口号,加入端口号cookie设置会失败。 Setcookie(“name”, “value”, time()+3600, ‘/’, ‘127.0.0.1:80’); //第5个参

朱健强的blog 天行健 君子以自强不息 2460

PHPCMS 中 cache_count() 函数的作用

原先我不明白 cache_count 有什么作用,现在谈谈它的用法。 cache_count() 函数第一次看到是在 PHPCMS2008 中,作用是缓存一条 COUNT(*) SQL 查询的结果,如: cache_count("SELECT COUNT(*) AS count FROM ...") 有一次在写一个后台分页功能时,统计 COUNT(*) 总数的查询使用了 cach

朱健强的blog 天行健 君子以自强不息 2318

phpcms2008 search 全文搜索模块说明

search 模块是用于支持对 cms 中允许进行全文搜索的内容进行全文搜索。 全文搜索的内部实现是使用 MySQL MyISAM 表的全文搜索索引。数据表为 search(eg. phpcms2008_search)。 search 表只有三个字段:searchid, type, data. searchid 是自动编号主键,type 表示内容的类型,比如是属于新闻还是属于产品等。

朱健强的blog 天行健 君子以自强不息 2072

phpcms2008 系统结构

# 总结构 phpcms2008(以下简称为cms) 主要分成[PHPCMS核心]和其它[模块]两大部份。 admin, include, templates 三个目录为核心目录。 ask, brand, comment 这类目录则是模块目录,如 ask 目录就是 ask 模块,目录中放的是 ask 模块的源代码。 另外还有 data, images, uploadfile 三个数据目

朱健强的blog 天行健 君子以自强不息 1985
上一篇: php ghook 全局钩子功能 v0
下一篇: php 数据库访问类(模型 Model) v1.1
gevolution90
博客等级 码龄18年 19粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值