> 백엔드 개발 > PHP 튜토리얼 > php错误处理和php异常处理机制_PHP教程

php错误处理和php异常处理机制_PHP教程

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-07-13 10:35:46
원래의
1025명이 탐색했습니다.

php错误处理

当我们开发程序时,有时候程序出现了问题,我们就可以用以下几种办法找出错误。

开发阶段:开发时输出所有的错误报告,有利于我们进行程序调试
运行阶段:我们不要让程序输出任何一种错误报告(不能让用户看到(包括懂技术, 不懂技术的人))

将错误报告写入日志中
一、指定错误报告 error_reporting = E_LL
二、关闭错误输出 display_errors = Off
三、开启错误日志功能 log_errors = On

1. 默认如果不指定错误日志位置,则默认写WEB服务器的日志中
2. 为error_log选项指定 一个文件名(可写)
3. 写入到操作系统日志中error_log=syslog

以下代码示例

1

2

3

4

5

6

7

8

9

10

11

12

<?php

//  error_reporting(E_ALL);

/// ini_set("display_errors", "off");

//  ini_set("error_log", "syslog");

//  ini_set("MAX_FILEUPLOAD", 200000000);

//  echo ini_get("upload_max_filesize");

//  error_log("this is a error message!!!!");

    getType($var);   //注意

    getType();  //警告

    getTye();  //错误  会终止程序运行

    echo "###########################<br>";

?>

로그인 후 복사

当然php还提供了函数error_get_last()来获得错误信息

函数定义和用法

error_get_last()函数获取最后发生的错误。 该函数以数组的形式返回最后发生的错误。 返回的数组包含 4 个键和值: [type] - 错误类型 [message] - 错误消息 [file] - 发生错误所在的文件 [line] - 发生错误所在的

小例子:

1

2

<?php echo $test; print_r(error_get_last()); ?>输出:

Array ( [type] => 8 [message] => Undefined variable: test [file] => D:\www\test.php [line] => 2 )

로그인 후 복사
所以这样我们也很方便了。。。这样是不是对调试程序和排查错误的时候很有帮助呢?

这些错误报告级别是错误处理程序旨在处理的错误的不同的类型:

常量 描述
2 E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
8 E_NOTICE

Run-time 通知。

脚本发现可能有错误发生,但也可能在脚本正常运行时发生。

256 E_USER_ERROR 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。
512 E_USER_WARNING 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。
1024 E_USER_NOTICE 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。
4096 E_RECOVERABLE_ERROR 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())
8191 E_ALL

所有错误和警告,除级别 E_STRICT 以外。

(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)

php异常处理机制

定义:

异常处理: 意外,是在程序运行过程中发生的意料这外的事,使用异常改变脚本正常流程

语法格式:

1

2

3

4

try

{ //...}

catch(Exception $e)

{ //...}

로그인 후 복사

PHP中try{}catch{}是异常处理.

将要执行的代码放入TRY块中,如果这些代码执行过程中某一条语句发生异常,则程序直接跳转到CATCH块中,由$e收集错误信息和显示.

PHP中try{}catch{}语句

为了进一步处理异常,我们需要使用PHP中try{}catch{}----包括Try语句和至少一个的catch语句。任何调用 可能抛出异常的方法的代码都应该使用try语句。Catch语句用来处理可能抛出的异常。

例子:

我写一段代码:

自己定义一个异常类
作用:就是写一个或多个方法解决当发生这个异常时的处理方式
1. 自己定义异常类,必须是Exception(内置类)的子类, 可以查看PHP手册里面Exception(内置类)的使用方法
2. Exception类中的只有构造方法和toString()可以重写, 其它都final

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<?php

class OpenFileException extends Exception {    //继承PHP的内置类

 

    function __construct($message = null, $code = 0){

        parent::__construct($message, $code);

 

        echo "wwwwwwwwwwwwwww<br>";

    }

    function open(){

        touch("tmp.txt");

 

        $file=fopen("tmp.txt", "r");

 

        return $file;

    }

}

?>

로그인 후 복사

1. 如果try中代码没有问题,则将try中代码执行完后就到catch后执行
2. 如果try中代码有异常发生,则抛出一个异常对象(使用throw),抛出给了catch中的参数, 则在try中代码就不会再继续执行下去 直接跳转到catch中去执行, catch中执行完成, 再继续向下执行
注意: 提示发生了什么异常,这不是主要我们要做事,需要在catch中解决这个异常, 如果解决不了,则出去给用户在下面代码中,如果我没有这个TMP.TXT文件的话,就会抛出异常了。

如果有异常,我们调用OPEN方法就可以解决这个异常了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<?php

 

try{

 

 $file=fopen("tmp.txt", "r");                                                           //  尝试读取这个文件

  if(!$file)

            throw new OpenFileException("文件打开失败");       //如果文件不存在则抛出异常

   

}catch(OpenFileException $e){  //$e =new Exception();

     

    echo $e->getMessage()."<br>";                                        //getMessage() 是PHP里面内置的方法,可以直接调用

 

    $file=$e->open(); 

 

 

}

로그인 후 복사

下面将代码进行整理以及多个异常处理方法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

<?php

/*

 *   异常处理: 意外,是在程序运行过程中发生的意料这外的事,使用异常改变脚本正常流程

 

 *  PHP5中的一个新的重要特性

 *

 *  if(){

 *

 *  }else{

 *

 *  }

 *

 *  try {

 *

 *  }catch(异常对象){

 *

 *  }

 

 *      1. 如果try中代码没有问题,则将try中代码执行完后就到catch后执行

 *      2. 如果try中代码有异常发生,则抛出一个异常对象(使用throw),抛出给了catch中的参数, 则在try中代码就不会再继续执行下去

 *          直接跳转到catch中去执行, catch中执行完成, 再继续向下执行

 *

 *

 *      注意: 提示发生了什么异常,这不是主要我们要做事,需要在catch中解决这个异常, 如果解决不了,则出去给用户

 *

 *  二、自己定义一个异常类

 *

 *      作用:就是写一个或多个方法解决当发生这个异常时的处理方式

 *

 *      1. 自己定义异常类,必须是Exception(内置类)的子类,

 *      2. Exception类中的只有构造方法和toString()可以重写, 其它都final

 *

 *  三、处理多个异常

 *

 

 *  自己定义功能类时如果在方法中抛出异常

 *

 *

 */

 

class OpenFileException extends Exception {

 

    function __construct($message = null, $code = 0){

        parent::__construct($message, $code);

 

        echo "wwwwwwwwwwwwwww<br>";

    }

    function open(){

        touch("tmp.txt");

 

        $file=fopen("tmp.txt", "r");

 

        return $file;

    }

}

 

 

class DemoException extends Exception {

    function pro(){

        echo "处理demo发生的异常<br>";

    }

}

 

class TestException extends Exception {

    function pro(){

        echo "这里处理test发生的异常<br>";

    }

}

 

class HelloException extends Exception {

 

}

 

class MyClass {

    function openfile(){

        $file=@fopen("tmp.txt", "r");

 

        if(!$file)

            throw new OpenFileException("文件打开失败");

    }

 

    function demo($num=0){

        if($num==1)

            throw new DemoException("演示出异常");

    }

 

    function test($num=0){

        if($num==1)

            throw new TestException("测试出错");

    }

 

    function fun($num=0){

        if($num==1)

            throw new HelloException("###########");

    }

}

 

try{

    echo "11111111111111<br>";

 

    $my=new MyClass();

 

    $my->openfile();

    $my->demo(0);

    $my->test(0);

    $my->fun(1);

    echo "22222222222222222<br>";

}catch(OpenFileException $e){  //$e =new Exception();

     

    echo $e->getMessage()."<br>";

 

    $file=$e->open();

 

 

}catch(DemoException $e){

    echo $e->getMessage()."<br>";

    $e->pro();

}catch(TestException $e){

    echo $e->getMessage()."<br>";

    $e->pro();

}catch(Exception $e){

    echo $e->getMessage()."<br>";

}

 

    var_dump($file);

    echo "444444444444444444444<br>";

로그인 후 복사

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/742411.htmlTechArticlephp错误处理 当我们开发程序时,有时候程序出现了问题,我们就可以用以下几种办法找出错误。 开发阶段:开发时输出所有的错误报告,...
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿