PHP5的异常处理机制[5]--PHP5之前的错误处理--使用PEAR处理错误

原创 2004年08月30日 20:50:00

()使用PEAR处理错误

你也可以使用PEAR来处理错误。当发生错误,将返回一个 Pear_Error对象。后面的代码通过一个静态方法PEAR::isError()来检验这个对象。如果错误确实发生了,那么返回的Pear_Error对象将提供你需要的所有相关信息:

PEAR::getMessage()

- the error message 出错信息

PEAR::getType()

- the Pear_Error subtype 错误类型

PEAR::getUserInfo()

- additional information about the error or its context 附加信息

PEAR::getCode()

- the error code (if any) 出错代码


这里我们修改了getCommandObject()方法,使之返回一个Pear_Error对象。

index_pear.php

<?php
// PHP 4
require_once("PEAR.php");
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
PEAR::RaiseError("Cannot find $path");
????????}
????????require_once
$path;

????????if (!
class_exists($cmd)) {
????????????return
????????????
PEAR::RaiseError("class $cmd does not exist");
????????}

????????
$ret = new $cmd();
????????if (!
is_a($ret, 'Command')) {
????????????return
????????????
PEAR::RaiseError("$cmd is not a Command");
????????}
????????return
$ret;
????}
}
?>

Pear_Error既是出错标志又包含有错误的相关具体信息,这对于客户代码来说是很好用的。

<?php
// PHP 4
$mgr = new CommandManager();
$cmd = $mgr->getCommandObject('realcommand');
if (
PEAR::isError($cmd)) {
????print
$cmd->getMessage()."/n";
????exit;
}
$cmd->execute();
?>

尽管返回一个对象值可以让你灵活对程序中的问题作出反映,它也有“污染接口”的副作用。因为现在 getCommandObject() 方法 出口有两个,而且都是对象,有时可能产生混淆。

PHP不允许你指明一个类方法或函数应当返回的值的类型,尽管这样比较方便。 getCommandObject()方法返回的即是Command对象或者一个Pear_Error对象。如果你想得到一定的类型的返回值,你必须每次都检验值的类型。一段谨慎的代码会充满复杂的检验条件语句,如果每种类型都检验的话。

以下是一段不考虑错误检验的 PEAR::DB客户代码

<?php
// PHP 4
require_once("DB.php");
$db = "errors.db";
unlink($db);
$dsn = "sqlite://./$db";
$db = DB::connect($dsn);
$create_result = $db->query("CREATE TABLE records(name varchar(255))");
$insert_result = $db->query("INSERT INTO records values('OK Computer')");
$query_result = $db->query("SELECT * FROM records");
$row = $query_result->fetchRow(DB_FETCHMODE_ASSOC);
print
$row['name']."/n";
$drop_result = $db->query("drop TABLE records");
$db->disconnect();
?>

程序的可读性很好,操作一目了然--我们选择一个数据库,新建一个数据表然后插入一行纪录,再取回数据,然后丢弃掉数据表。

再看看以下使用错误判断之后:

<?php
// PHP 4
require_once("DB.php");
$db = "errors.db";
unlink($db);
$dsn = "sqlite://./$db";

$db = DB::connect($dsn);
if (
DB::isError($db)) {
????die (
$db->getMessage());
}

$create_result = $db->query("CREATE TABLE records (name varchar(255))");
if (
DB::isError($create_result)) {
????die (
$create_result->getMessage());
}

$insert_result = $db->query("INSERT INTO records values('OK Computer')");
if (
DB::isError($insert_result)) {
????die (
$insert_result->getMessage());
}

$query_result = $db->query("SELECT * FROM records");
if (
DB::isError($query_result)) {
????die (
$query_result->getMessage());
}

$row = $query_result->fetchRow(DB_FETCHMODE_ASSOC);
print
$row['name']."/n";

$drop_result = $db->query("drop TABLE records");
if (
DB::isError($drop_result)) {
????die (
$drop_result->getMessage());
}

$db->disconnect();
?>

很明显加上错误检验后,代码显得冗长复杂。其实以上代码比起实际项目中的代码还要简单一些,但已经足以说明错误检验的复杂程度。

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

PHP5的异常处理机制[4]--PHP5之前的错误处理--使用PEAR处理错误

(三)使用PEAR处理错误你也可以使用PEAR来处理错误。当发生错误,将返回一个 Pear_Error对象。后面的代码通过一个静态方法PEAR::isError()来检验这个对象。如果错误确实发生了,...
  • klinghr
  • klinghr
  • 2010-01-31 00:42:00
  • 783

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

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

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

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

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

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

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

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

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的异常处理机制[2]--PHP5之前的错误处理之trigger_error()

我们或许可以通过trigger_error()生成一个用户警告来代替,使程序更具有灵活性。 Index2.php...
  • klinghr
  • klinghr
  • 2010-01-31 00:37:00
  • 1170

php中 include_path='.;c:php5pear'的错误解决

include_path='.;c:php5pear'的错误 warning: unknown: failed to open stream: no such file or directory i...
  • simengsiyu
  • simengsiyu
  • 2013-09-29 10:11:27
  • 658

python的异常处理机制

本菜鸟在用flask后台开发的时候经常会遇到异常管理机制的问题,例如登陆密码不匹配,没有输入等等。借此来学习一下python的异常管理机制。 1、try...except try...excep...
  • bigzhao_25
  • bigzhao_25
  • 2016-04-29 20:36:38
  • 958

php中提示Fatal error: require(),“include_path=’.;c:\php5\pear’”错误的解决方法

php中提示“include_path=’.;c:php5pear’”错误的解决方法_阿汤博客 http://www.amd5.cn/atang_2809.html...
  • Jaystrong
  • Jaystrong
  • 2017-04-25 17:56:33
  • 476
收藏助手
不良信息举报
您举报文章:PHP5的异常处理机制[5]--PHP5之前的错误处理--使用PEAR处理错误
举报原因:
原因补充:

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