首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PHP异常真的比错误更有用吗?(Adv)

PHP异常真的比错误更有用吗?(Adv)
EN

Stack Overflow用户
提问于 2009-10-26 09:26:07
回答 4查看 871关注 0票数 1

我认为,在正确编码的系统中,错误(作为错误或异常)是不可能的(除了DB/memcached服务器停机,导致查询失败)。我们的代码不应该依赖于任何假设才能正常工作,并且应该尽可能地防弹。

然而,为了确保我们的系统以最友好的方式处理问题,我们必须建立和实现某种“捕获系统”,以确保一旦出现任何错误,我们的服务器人员和最终用户都将得到照顾。

为此,PHP提供了两种解决方案--错误和异常。错误由5个值组成,而异常由包装在一个对象中的5个值组成。两者都允许回溯,这是宝贵的,而应用程序正在建设。

这5个值是$error_code,$error_message,$file,$line,$context

通常,在我们为正确的OOP编程而奋斗的过程中,默认的选择总是追求对象--但在这种情况下,我不确定它们到底有多大的益处。通过使用异常,会浪费额外的内存来满足将值包装到对象中的需要(这通常还需要包含异常类的额外文件)。此外,还必须包装您认为在TRY / CATCH {}块中可能失败的任何代码。这使得错误处理方法对人为错误开放,因为开发人员可能不涵盖故障点。为了安全防范这一点,您可以使用set_exception_handler,它将被传递任何未捕获的异常。异常处理程序的坏处在于,在调用exception_handler之后,执行将停止--因此,如果未在try / catch块中捕获可恢复/忽略的异常,则不存在可恢复/忽略的异常。

另一方面,错误总是全局的,可以由set_error_handler设置的任何函数/类来处理。这样就不需要额外的异常类、对象内存或行try / catch代码。与异常一样,错误也带有内置错误代码(与异常不同),您可以使用这些代码继续执行脚本,以解决次要或不重要的脚本问题。此外,大多数PHP函数都会触发错误,因此不会违背语言流。

因此,假设您无论如何都必须支持错误处理(对PHP语言做此操作),那么浪费额外的代码和内存并实现异常的目的是什么?我们只是盲目地这样做,是因为它是对象形式上的错误,还是应用程序设计中的实际好处,而普通的错误并不能给我们带来好处?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-26 10:15:33

我认为错误和例外的定义在哲学上是有区别的。

简单地说,错误是由代码中的逻辑谬误生成的程序缺陷。传递strlen() --一个不正确的参数数--自然是一个错误。另一方面,一个异常处理所有东西都被正确编程的情况,但是您的代码正在与代码库之外的资源(文件系统、web服务、外部可执行文件等)交互。虽然这些外部资源应该在每个调用上都能很好地工作,但是也会有一些情况--超出程序控制范围--并不归因于代码的错误(文件系统被卸载,连接超时等等)。由于这些问题是由外部因素造成的,因此被视为例外。

主要的区别是错误发生在自己的代码中,而异常发生在第三方资源中的异常情况下。

票数 3
EN

Stack Overflow用户

发布于 2009-10-26 09:30:27

这句话之后我就停止阅读了:

我认为,在正确编码的系统中,错误(作为错误或异常)是不可能的(除了DB/memcached服务器停机,导致查询失败)。

这是异常的整体用途 --作为代码中管理异常情况的构造。

如果您将异常作为_un_exceptional普通程序流的一部分抛出,那么您正在做一些错误的事情。

如果您不知道为什么异常对于特殊情况是有用的,那么也许您需要花一些时间使用真正的OO语言。(提示: PHP不是真正的OO语言。)

票数 7
EN

Stack Overflow用户

发布于 2009-10-26 09:33:32

除了所有这些错误的面向对象方法之外,扩展异常还具有很大的优势。

因此,您可以捕获IOExceptions在一个catch块中的所有子异常(例如,在一个catch块中),以及在另一个catch块中捕获所有其他异常,在那里您可能再次抛出该异常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try
{
    // [...] (some code causing the exception)
}
catch(IOException $e)
{
    // do your processing here, like let's say set correct filemodes.
}
catch(Exception $e)
{
    // catches all other exceptions
}

此外,它们还为您提供了一种更标准化的处理脚本中错误的方法。当您使用try/catch块时,错误处理看起来几乎总是相似的,而且在许多情况下比使用代码等的正常错误更容易解释。

你能更好地理解哪一个:?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
switch($errorCode)
{
    case 1450:
        // Create the database column
        break;
}

// or

catch(ColumnNotFoundException $e)
{
    // Create the database column
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1626119

复制
相关文章
js 数组转json,json转数组[js 数组与json 互相转换]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151825.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/24
12K0
php 数组转json对象 和json 数组
php中数组转json的规则是:当没有指定索引(0~n)时会转换为json数组,而指定了索引会转换为json对象。
全栈程序员站长
2022/06/24
6.4K0
js 数组转json和json转数组
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151869.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/24
8K0
js中onclick传json数据
js中onclick传json数据 现在要在onclick事件中传递对象参数,由于我们是通过字符串拼接传的,那我们传之前用JSON.stringify(value)先将JSON对象转为JSON字符串,传之后再用eval(value)将JSON字符串转为JSON对象。(当然了,方法很多,这只是其中一种)
别团等shy哥发育
2023/02/25
10.3K0
js中onclick传json数据
ajax前端传多维数组到php后台,关联数组转json到后台方法
这是一个技术性的问题,百度说的JSON.stringify(arr)是不能转换关联数组的,甚至索引数组也是有很多缺点
仙士可
2019/12/19
3.1K0
ajax前端传多维数组到php后台,关联数组转json到后台方法
js json字符串转json数组_string转json数组
查了很久,也实践了很多,都没有成功。网上说得最多的就是用 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包里面的
全栈程序员站长
2022/11/08
13.3K0
Js 数组转JSON格式
要点2:在js里写数组的时候是var data = new Array() 但是你如果是要转json显示的时候就要写成 var data = {},不然转出来的json全是空的。
全栈程序员站长
2022/06/24
12K0
Js 数组转JSON格式
js数组添加json数据[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133387.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/14
11.7K0
PHP 数组转 JSON支持中文
value: 要编码的值。该函数只对 UTF-8 编码的数据有效。 options:由以下常量组成的二进制掩码:JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT
九霄道长
2021/03/02
3K0
PHP数组转json「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151842.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/24
1.5K0
json数组对象转化为json字符串_js如何转数组
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/08
5.1K0
js数组、json、js对象的区别与联系
最近在敲代码时,遇上了一个关于JS数组的问题,由此引发了关于对象和json的联想,曾经觉得很畅顺的知识点突然模糊了。于是,为了理清这些东西,有了如下这篇文章。觉得没问题的猿们可以当复习,而那些带着疑问的童鞋可以细细看。当然,有任何问题欢迎指出。理清这些问题,第一步当然是找到他们的概念:js所有事物都是对象:字符串、数值、数组、函数…此外,JavaScript允许自定义对象 (1)JS数组,常态为var a = [1,2,3]的格式,用文字来形容就是一个有序数列。因为是有序的,所以里面的东西是按序排放。 (
IT架构圈
2018/05/31
9.4K0
js 二维数组 添加json数据及js数组与json字符串「建议收藏」
JSON(JavaScript Object Notation )是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,JSON是JavaScript原生数据格式。
全栈程序员站长
2022/09/01
4.4K0
js 二维数组转Json数组「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151829.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/24
2.5K0
如何将多个参数传递给 React 中的 onChange?
在 React 中,一些 HTML 元素,比如 input 和 textarea,具有 onChange 事件。onChange 事件是一个非常有用、非常常见的事件,用于捕获输入框中的文本变化。有时候,我们需要将多个参数同时传递给 onChange 事件处理函数,在本文中,我们将介绍如何实现这一目标。
网络技术联盟站
2023/06/07
2.7K0
【笔记php】如何使用PHP从JSON提取数据?
2022年8月26日16点36分 如何使用PHP从JSON提取数据? 不多bb,直接上示例 一 $Json = ' { "type": "fish9.cn", "name": "fish9.cn" }'; $fish = Json_decode($Json,true); echo $fish["type"]; //结果fish9.cn 二 $Json = '{ "type":"fish9.cn", "name":"fish9.cn", "daily":[{
吃猫的鱼Code
2023/02/02
4.9K0
js如何将json字符串转成json对象_前端json字符串转json对象
JSON字符串: var str1 = ‘{ “name”: “cxh”, “sex”: “man” }’; JSON对象: var str2 = { “name”: “cxh”, “sex”: “man” };
全栈程序员站长
2022/11/08
9.4K0
WebView 和 JS 交互,如何将 Java 对象和 List 传值给 JS ?
随着混合开发模式比较流行,很多时候,我们需要在原生的基础上,使用 WebView 加载网页,这样控制更加方便。今天我们来看看,如何将 Java 对象 和 List 集合传值给 JS 调用。 1 如何将 Java 对象实例传值给 JS 其实将我们在 Android 原生中将 Java 对象实例传值给 JS 承认并且可以使用的对象,方法非常简单。我们来举个例子。 1.1 Html 文件 我们在本地写了一个 html 文件,放在 assets 目录中。 <!DOCTYPE html> <html> <he
非著名程序员
2018/02/09
8.6K0
WebView 和 JS 交互,如何将 Java 对象和 List 传值给 JS ?
PHP数组转json遇到的问题汇总
数据库中的浮点数会自动转成字符串,这个是正常的,特别注意不要直接通过json传递浮点数,会出现精度丢失或错乱的问题,所以还是转字符串后传递为好。
超级小可爱
2023/02/20
1.2K0
PHP csv文件内容转成数组/Json
$lines = array_map('str_getcsv', file($filePath));; $result = array(); $headers = null; if (count($lines) > 0) { $headers = $lines[0]; } for($i=1; $i<count($lines); $i++) { $obj = $lines[$i]; $result[] = array_combine($headers, $obj);//转成数组
悟空聊架构
2018/06/26
1.6K0

相似问题

将php数组传递给json文件(PHP ->Json->JS)

24

如何将JS数组传递给PHP

24

如何将json值php传递给js

50

将数组从php传递给js

30

如何将PHP数组传递给JS并生成JS数组

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文