zoukankan      html  css  js  c++  java
  • PHP中try、catch、finally的执行顺序

    今天在看同事写的代码时,发现用了finally,我之前都不知道PHP中有finally,所以搜索了一些相关的知识,并写了代码来验证。

    测试代码如下:

    执行catch:

     1 <?php
     2 
     3 $t = new TTT();
     4 echo $t->run(), PHP_EOL;
     5 
     6 class TTT
     7 {
     8     public function run()
     9     {
    10         try {
    11             echo 'In Try', PHP_EOL;
    12             throw new Exception('wrong');
    13 
    14             return 'From Try';
    15         } catch (Exception $e) {
    16             echo 'In Catch', PHP_EOL;
    17 
    18             return 'From Catch';
    19         } finally {
    20             echo 'In Finally', PHP_EOL;
    21 
    22             return 'From Finally';
    23         }
    24     }
    25 }

    执行结果如下:

    没有执行catch: 

     1 <?php
     2 
     3 $t = new TTT();
     4 echo $t->run(), PHP_EOL;
     5 
     6 class TTT
     7 {
     8     public function run()
     9     {
    10         try {
    11             echo 'In Try', PHP_EOL;
    12 //            throw new Exception('wrong');
    13 
    14             return 'From Try';
    15         } catch (Exception $e) {
    16             echo 'In Catch', PHP_EOL;
    17 
    18             return 'From Catch';
    19         } finally {
    20             echo 'In Finally', PHP_EOL;
    21 
    22             return 'From Finally';
    23         }
    24     }
    25 }

    执行结果:

    finally中没有返回值:

     1 <?php
     2 
     3 $t = new TTT();
     4 echo $t->run(), PHP_EOL;
     5 
     6 class TTT
     7 {
     8     public function run()
     9     {
    10         try {
    11             echo 'In Try', PHP_EOL;
    12 //            throw new Exception('wrong');
    13 
    14             return 'From Try';
    15         } catch (Exception $e) {
    16             echo 'In Catch', PHP_EOL;
    17 
    18             return 'From Catch';
    19         } finally {
    20             echo 'In Finally', PHP_EOL;
    21 
    22 //            return 'From Finally';
    23         }
    24     }
    25 }

    执行结果:

    代码的执行顺序是:先执行try,抛出异常的话就会运行catch,没有抛出异常的话则不会运行catch,但这两种情况都会finally,并且,finally中的返回值会覆盖掉前面语句的返回值。

     finally的意义在于可以处理一些资源的清理和回收等操作。

  • 相关阅读:
    jquery实现选项卡(两句即可实现)
    常用特效积累
    jquery学习笔记
    idong常用js总结
    织梦添加幻灯片的方法
    LeetCode "Copy List with Random Pointer"
    LeetCode "Remove Nth Node From End of List"
    LeetCode "Sqrt(x)"
    LeetCode "Construct Binary Tree from Inorder and Postorder Traversal"
    LeetCode "Construct Binary Tree from Preorder and Inorder Traversal"
  • 原文地址:https://www.cnblogs.com/moxiaoping/p/9037534.html
Copyright © 2011-2022 走看看