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中提供了更好的解决方案。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Haohappy2004/article/details/89173

PHP5的异常处理机制[2]--PHP5之前的错误处理之die()

PHP5之前的错误处理在PHP5之前的程序错误处理多使用以下三种办法:1. 使用trigger_error()或die()函数来生成一个脚本层次的警告(warning)或致命错误(fatal erro...
  • Haohappy2004
  • Haohappy2004
  • 2004-08-27 22:07:00
  • 2244

PHP错误异常处理详解

PHP异常处理详解          异常处理(又称为错误处理)功能提供了处理程序运行时出现的错误或异常情况的方法。   异常处理通常是防止未知错误产生所采取的处理措施。异常处理的好处是你不用再绞尽脑...
  • hguisu
  • hguisu
  • 2012-04-16 12:56:36
  • 41878

PHP的错误处理

php的错误处理方法可以通过以下方式重写(在代码开始的地方自定义即可): error_reporting(0);//0为不输出PHP自带的错误输出,E_ALL为所有的警告和错误都输出 ...
  • u014359108
  • u014359108
  • 2016-12-08 17:31:42
  • 342

PHP错误和异常详解(PHP7错误处理)

世界上没有绝对完美的事,对于程序员来说更是如此,无论我们多么努力、多么细心的开发一个项目,总会有缺陷和错误的存在。错误和异常的异同&quot;错误&quot;和&quot;异常&quot;的概念十分相...
  • qq_34858648
  • qq_34858648
  • 2018-03-12 14:29:51
  • 67

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

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

PHP5的异常处理机制[5]--PHP5之前的错误处理--小结

综合以上的讨论,我们需要一个这样的错误处理机制: 1.允许一个方法给出一个出错标记给客户代码 2.提供程序错误的详细信息 3.让你同时判断多个出错条件,将你的错误报告和程序处理流程分开。 4.返回值必...
  • klinghr
  • klinghr
  • 2010-01-31 00:49:00
  • 536

PHP之错误处理

错误报告   PHP程序的错误发生一般归属于下列三个领域:   1、语法错误   语法错误最常见,并且也容易修复。如:代码中遗漏一个分号。这类错误会阻止脚本的执行   2、运行...
  • p77ll9l53x
  • p77ll9l53x
  • 2017-05-04 14:04:29
  • 70

(5)php框架开发---错误处理

    在写开发的时候难免会出现代码写错的尴尬,这里面如果不是在运行环境的话,我们可以直接使用以下的命令来直接显示错误在页面上ini_set('display_errors',1); ...
  • zsc2014030403015
  • zsc2014030403015
  • 2018-03-12 20:34:10
  • 34

PHP5的异常处理机制[1]--PHP5之前的错误处理之die()

在PHP5之前的程序错误处理多使用以下三种办法:1. 使用trigger_error()或die()函数来生成一个脚本层次的警告(warning)或致命错误(fatal error); 2. 在类方法...
  • klinghr
  • klinghr
  • 2010-01-31 00:02:00
  • 1339

PHP5的异常处理机制[3]--PHP5之前的错误处理之trigger_error()

我们或许可以通过trigger_error()生成一个用户警告来代替,使程序更具有灵活性。Index2.php// PHP 4 require_once(cmd_php4/Command.php); ...
  • Haohappy2004
  • Haohappy2004
  • 2004-08-28 12:45:00
  • 2976
收藏助手
不良信息举报
您举报文章:PHP5的异常处理机制[4]--PHP5之前的错误处理--返回Error flag(错误标记)
举报原因:
原因补充:

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