• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP后台接口的一些问题

php 搞代码 4年前 (2022-01-25) 10次浏览 已收录 0个评论
文章目录[隐藏]

1.用PHP作后台 关于一些接口的编写问题。用
try{

<code>if(empty($a) || !isset($a)){    throw new Exception("***")}</code>

} catch (Exception $e){

<code>echo $e->getMessage();</code>

!本文来源gaodai#ma#com搞*!代#%^码网5

搞gaodaima代码

}

和 用
if(isset($a) && !empty($a)){

}

哪种好 有区别么

回复内容:

1.用PHP作后台 关于一些接口的编写问题。用
try{

<code>if(empty($a) || !isset($a)){    throw new Exception("***")}</code>

} catch (Exception $e){

<code>echo $e->getMessage();</code>

}

和 用
if(isset($a) && !empty($a)){

}

哪种好 有区别么

异常处理和条件判断,很明显不是一个层面的东西!异常处理可以帮助程序增加可维护性,举例如下:

函数和函数调用场景中

使用条件判断的话代码如下:

<code><?phpfunction hello($name){    if(empty($name)){        return -1;    }    return "hello ".$name;}$result = hello('kobe');if($result===-1){    echo "姓名不能为空";}else{    echo $result;}</code>

如果使用异常处理的代码如下:

<code><?phpfunction hello($name){    if(empty($name)){        throw new Exception("姓名不能为空");    }    return "hello ".$name;}try{    $result = hello();    echo $result;}catch (Exception $e){    echo $e->getMessage();}</code>

现在我们假设使用条件判断增加参数或者修改错误返回代码为-2,都需要修改外部调用代码

但是如果我们用异常处理的代码,外部因为是通过try catch来捕获的,所有只需要关心如何修改业务逻辑的代码即可,比如

<code><?phpfunction hello($name,$age){    if(empty($name)){        throw new Exception("姓名不能为空");    }    if(empty($age)){        throw new Exception("年龄不能为空");    }    return "hello ".$name ." $age";}try{    $result = hello($name);//只需要修改这一部分业务逻辑代码    echo $result;}catch (Exception $e){    echo $e->getMessage();}</code>

都不好…
对于第一个例子,如果 empty($a) 是 false,那么!isset($a)必然也是false,如果 empty($a) 是 true,用户按不会进行后面的判断
对于第二个例子,相同的一个道理
所以,你的代码直接用 if (! empty($a)) 就行了。

isset更多的用来检测数组下标,例如

<code>if (isset($_POST['username'])) {    $username = $_POST['username'];} else {    $username = '';}</code>

如果不做这个检查可能会引起一个Notice级别的错误。
而对于普通的变量,常见的处理为

<code>if (empty($a)) {    $a = 0; //因为$a可能是null, 空, 0, false,所以强调一下用0值表示。}</code>

关于要不要使用try catch结构看你们怎么定的项目编码规范了。但是你的用法不对。

<code>if (empty($a)) {    throw new Exception('error');}</code>

就可以了,交给别人去捕获并处理,自己抛异常然后自己捕获是形而上学(这里的自己是指当前的域)。你想想以下两种写法有区别吗?

<code>try{    if(empty($a))throw new Exception('error');}catch(Exception $e) {    die('错误');}if (empty($a)) die('错误');</code>

try…catch 的目标是捕捉程序运行中抛出的异常.
第一段中把整体程序都被 try 包裹,并且把业务异常当做程序异常抛出.
第二段代码也是好多项目里的写法,业务异常错误就响应个错误.
和第二段相比较,没有好或坏,只有是否符合当前项目.
这种代码设计就要看团队的开发规范.

目前我这里也是把业务异常当做代码异常抛出,在最外层catch所有的异常.
针对不同类型的异常做不同的处理,比如是否写入日志,是否报警.

你好:首先你先区别出来isset() 和 empty()不同,isset()判断的是变量或者值是否设置,至于是空不是空就不管了,而empty()判断值是否为空,并不管值是否存在,只做非空判断。

个人建议用if(isset($a) && !empty($a)){}来做判断!

个人观点!!!

我应该怎么回答这个问题


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP后台接口的一些问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址