我现在写代码做错误处理的时候,都是用的 if else 并用echo输出错误但是 这样做的话  就用点不妥,很不严谨,比如说java的try catch做的异常处理就显得非常严谨,虽然php中也可以用try catch来做,但是看开源的东西 ,都几乎不用想问下高手 , php 用if else做错误处理  规范吗??

解决方案 »

  1.   

    这个 除了在类设计的时候考虑这个 基本上没有做过专门设计。因为php自身在错误的处理上已经比较完善了。如果设计上存在错误的话那是经验问题。而且变量是弱类型很多 原本可能发生的错误都给消化掉了 嘿嘿
      

  2.   

    我个人感觉,在平时编写和数据库操作相关的代码时,用try catch比if else要好一些。
      

  3.   

    嗯, 这个...开始口水...
    首先,php的新模块基本都支持try_catch....这个是官方态度.-------------------------------------------------------好,然后说个人感受, 这个catch...throw还是很有需要的....不过很多同学切身感受不够,一般来说属于遇上的领导/客户比较温柔.....
    下面详细说说....就说这个致命错误吧,出现了就必须停止的,比如, 你有个函数, getWhatWhatConfig() 读一个配置文件ttt, 必须读到, 否则下面没法干...
    所以, 你 
    $config = file_get_contents('/path/to/config/file/ttt');
    if($config===FALSE){ 
        die('文件木有,没法混了....');
    }
    ....
    很好, 可是...TM的系统管理员总喜欢把一些临时文件也放在一个叫ttt文件里,然后过几天就删,删的时候记不得在哪,他就find foo -name ttt -exec rm -rf {} \; 
    每次都把这个配置文件给删了...老毛病说了还改不掉....所以网站就三天两头"没法混了...",领导同志一生气...怎么回事...就算出问题也要显示得漂亮点吗...怎么一行字就完了,得加上头脚...加图片.加颜色,加回去的链接....然后你就改.
    die=> echo ...........N 行html.... 函数变得老大....然后头疼的是, 美工每个月要换换图片....
    然后你就改成直接调用外面的layout,
    但是....layout上有动态内容啊,你得pass N个参数进这个getWhatWhatConfig函数 ....
    然后....领导又发话了, 怎么在不同模块里都是一个样子啊,
    我们需要在"妇女"模块里,这个错误显示成粉红色的...在"猛男"模块显示成黑白色的...
    然后要如果用户是老人显示成简洁风格....小孩显示成幼稚风格....
    然后如果用户在北京显示成沙尘暴背景,在海南显示成沙滩美女背景......
    .....
    然后.....你想,这个显示还是交回给上级调用程序处理比较好...
    所以改成...return -1 
    ....可是, 系统管理员来了,这个错误信息太简单,我们看见了不知道到底什么错,有时候是没文件,有时候是文件权限不可读,有时候是文件内容给修改错了...能不能显示详细点....
      于是,改成 switch...return -1...return -2... return -3 ....
    可是,TNN的,过了几天文件格式修改了, -1,-2...变成可以返回的正确返回值之一....
    于是,再改成...return 'ERROR-1'...return 'ERROR-2',.....
    TNN的,格式又改了....任何字串都有可能....ERROR-1没准就是正确的值....
    想了想...各种预定义类型都不行,只好自己定义一个类了....
    于是你又改.....return new MyError(1,'没法混了')....return new MyError(2,'混不动了')....
    .........
    .........
    恭喜你.....你终于创建出了php已经存在的exception处理方式.....-------------------------------------------有些有经验的同学会说还可以用trigger_error 和 set_error_handler,
    没错,那样也可以将错误集中处理,
    但是对需要环境变量的情况,就是上面说的各种用户/模块..区别处理的情况
    一样是很麻烦的
    尤其是,这个函数如果是公共底层函数,
    调用它的上层代码有可能连框架/应用都不是一样的....想想有些用的是smarty,有些用了Zend..有些是在wordpress里...----------------------------------------------关于楼主说的:"开源的东西 ,都几乎不用".....我个人意见是: 因为php的开源世界还不够完美....:)实际上一些新的开源项目,尤其是php5为基础的,很多还是用exception的,比如Zend