PHP5的异常处理机制[4]--PHP5之前的错误处理--返回Error flag(错误标记)

原创 2004年08月30日 17:42:00

(二)返回错误标记

脚本层次的错误处理比较粗糙但很有用。尽管如此,我们有时需要更大的灵活性。我们可以使用返回错误标识的办法来告诉客户代码“错误发生了!”。这将程序是否继续,如何继续的责任交给客户代码来决定。

这里我们改进了前面的例子来返回一个脚本执行出错的标志(false是一个常用的不错的选择)

index3.php

<?php
// PHP 4
require_once('cmd_php4/Command.php');
class
CommandManager {
    var
$cmdDir = "cmd_php4";

    function
getCommandObject($cmd) {
        
$path = "{$this->cmdDir}/{$cmd}.php";
        if (!
file_exists($path)) {
            return
false;
        }
        require_once
$path;

        if (!
class_exists($cmd)) {
            return
false;
        }

        
$ret = new $cmd();
        if (!
is_a($ret, 'Command')) {
            return
false;
        }
        return
$ret;
    }
}
?>

这意味着你可以根据环境来处理多个错误,而不会在第一个错误发生时马上停止程序的执行。

<?php
// PHP 4
$mgr = new CommandManager();
$cmd = $mgr->getCommandObject('realcommand');
if (
is_bool($cmd)) {
    die(
"error getting command/n");
} else {
    
$cmd->execute();
}
?>

or just a logged error:

<?php
// PHP 4
$mgr = new CommandManager();
$cmd = $mgr->getCommandObject('realcommand');
if(
is_bool($cmd)) {
    
error_log("error getting command/n", 0);
    }
else {
    
$cmd->execute();
}
?>

使用像“false”这样的错误标志的好处是直观,但是明显给出的信息量不够,我们无法得知到底是在哪一个环节上错而导致返回false。你可以再设置一个error属性,这样在产生错误后输出出错信息。

index4.php

<?php
// PHP 4
require_once('cmd_php4/Command.php');
class
CommandManager {
    var
$cmdDir = "cmd_php4";
    var
$error_str = "";

    function
setError($method, $msg) {
        
$this->error_str  =
        
get_class($this)."::{$method}(): $msg";
    }

    function
error() {
        return
$this->error_str;
    }

    function
getCommandObject($cmd) {
        
$path = "{$this->cmdDir}/{$cmd}.php";
        if (!
file_exists($path)) {
            
$this->setError(__FUNCTION__, "Cannot find $path/n");
            return
false;
        }
        require_once
$path;

        if (!
class_exists($cmd)) {
            
$this->setError(__FUNCTION__, "class $cmd does not exist");
            return
false;
        }

        
$ret = new $cmd();
        if (!
is_a($ret, 'Command')) {
            
$this->setError(__FUNCTION__, "$cmd is not a Command");
            return
false;
        }
        return
$ret;
    }
}
?>

这个简单的机制可以让setError()录下错误信息。其它代码可以通过error()来获得脚本错误的相关信息。你应该将这个功能抽取出来并放在一个最基本的类中,其它所用类都从这个类继承而来。这样可以统一处理错误,否则可能出现混乱。我就曾经见过有些程序在不同的类中使用getErrorStr() getError()error()等功能相同的函数。

然而,实际开发中要让程序中的所有类都从同一个类中继承而来是很困难的,除非同时使用接口(interface)否则无法实现一些子类自身特有的功能,但那已经是PHP5的内容。就像我们将提到的,PHP5中提供了更好的解决方案。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【PHP】PHP7的异常处理详解

前言 PHP7的改动中,影响比较大的,包括异常处理。 概述 更多的异常是直接通过PHP直接处理的,和之前的PHP5不同的是更多的异常是通过Error exceptions来抛出。 作为一个普通...
  • diandianxiyu
  • diandianxiyu
  • 2016年01月20日 16:38
  • 2832

ASP.NET MVC中的统一化自定义异常处理

当ASP.NET MVC程序出现了异常,怎么处理更加规范? 1. 最简单的方法是设置节点 节点用于定义一些自定义错误信息的信息。此节点有Mode和defaultRedirect两个属性,其中def...
  • yhyhyhy
  • yhyhyhy
  • 2016年03月29日 10:28
  • 451

php 引用变量机制

原文地址: http://derickrethans.nl/collecting-garbage-phps-take-on-variables.html 关于PHP垃圾回收机制(Garbage ...
  • newbird105
  • newbird105
  • 2015年04月27日 20:44
  • 673

从PHP5到PHP7的注意事项

原文地址:https://www.phpxy.com/article/25.html PHP7是大势所趋了。PHP7有更多的新特性,更好的性能,更高的速度。并且,从今年8月7日开始发行PHP...
  • cjsyr_cjsyr
  • cjsyr_cjsyr
  • 2016年12月09日 16:32
  • 4323

php5.5+apache2.4安装 环境搭建

在进行php开发之前需要搭建php和apache结合的开发环境。 具体步骤如下:一、下载安装包1.1、php5.5.6下载链接 http://windows.php.net/download/#ph...
  • hua245942641
  • hua245942641
  • 2016年02月24日 18:15
  • 3980

struts2异常处理,global-results定义全局结果处理

COME FROM global-results>定义全局结果处理 一般发生异常之后 结果返回errHandler 因为errHandler是由关联到Exception这个类了 然后处理结果 ...
  • u011554611
  • u011554611
  • 2015年01月03日 20:29
  • 1476

lua5.3异常机制

lua本质上利用C函数来操作LUA虚拟机。LUA虚拟机对于C来说只是在堆上的内存对象。     lua有自己的运行对象(协程),每个协程有自己的调用栈。     比如下面的函数:     functi...
  • yuanfengyun
  • yuanfengyun
  • 2016年12月04日 16:18
  • 1228

ASP.NET MVC中的统一化自定义异常处理

当ASP.NET MVC程序出现了异常,怎么处理更加规范? 1. 最简单的方法是设置节点 节点用于定义一些自定义错误信息的信息。此节点有Mode和defaultRedirect两个属性,其中def...
  • sundacheng1989
  • sundacheng1989
  • 2013年05月31日 15:12
  • 16804

PHP中的异常处理

1.什么是异常?异常和错误有什么区别? 1.异常:程序运行与预期不太一致,与错误是两个不同的概念! 2.抛出和捕获异常 3.多个catch块的时候基类要往后放,否则基类捕获异常后就不会...
  • wjc19911118
  • wjc19911118
  • 2015年07月13日 10:28
  • 1986

java深入浅出解析异常机制

三月份啦,月初第一篇写一份异常机制的完全解析,表明这个月努力学习的决心! 以下长文预警!!! java中的异常处理的目的在于通过使用少量的代码,使得程序有着强大的鲁棒性,并且这种异常处理机制会让...
  • QuinnNorris
  • QuinnNorris
  • 2017年03月02日 19:38
  • 2154
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP5的异常处理机制[4]--PHP5之前的错误处理--返回Error flag(错误标记)
举报原因:
原因补充:

(最多只允许输入30个字)