PHP函式register_shutdown_function的用法

OldBoy~發表於2018-01-10

register_shutdown_function這個函式是在PHP程式執行結束之前呼叫的,用這個函式可以做很多,比如呼叫執行發生致命錯誤中止的原因,或者除錯程式的執行時間等。

PHP終止的情況有哪些呢?

一、執行完成(等執行完成了之後才會去執行register_shutdown_function的中止方法testFun)

<?php
function testFun() { echo
'程式執行完成執行testFun方法'; } register_shutdown_function('testFun'); echo '測試一下----' . '<br>';
測試一下----           //結果
程式執行完成執行testFun方法  //在執行完最後一行程式碼,呼叫函式

二、exit/die導致的中止(後面的=====測試一下-----沒有輸出,即exit或者是die方法導致提前中止)

<?php
function testFun() { echo
'程式終止執行testFun方法'; } register_shutdown_function('testFun'); echo '-----測試一下----' . '<br>'; exit(); echo '=====測試一下----' . '<br>';
-----測試一下----       
程式終止執行testFun方法   //終止的時候執行

三、發生致命錯誤中止

<?php
function testFun()  
{  
    echo '程式發生致命錯誤執行testFun方法';  
}  
  
register_shutdown_function('testFun');  
  
echo '-----測試一下----' . '<br>';  
undefinedFunc ();    //呼叫未定義函式
echo '=====測試一下----' . '<br>'; 
-----測試一下----

Fatal error: Call to undefined function undefinedFunc() in D:\phpStudy\WWW\miaosha\web\index.php on line 12
程式發生致命錯誤執行testFun方法

稍微複雜一點,陣列形式傳參

呼叫指定類中的方法

<?php
class TestClass 
{
    function testFun()  
    {  
        echo '終止呼叫類中的方法';  
    }  
}

register_shutdown_function([new TestClass(), 'testFun']);  
  
echo '測試一下' . '<br>';
測試一下
終止呼叫類中的方法

例項化引數傳遞,類方法中呼叫

<?php
class TestClass 
{
    public $str = '';
    public function __construct ($str = '') 
    {
        $this->str = $str;
        register_shutdown_function([$this, 'testFun'], 'StrParam');
    }
    function testFun($StrParam = '')  
    {  
        echo $this->str . '<br>';
        echo '終止呼叫類中的方法' . '<br>';
        echo $StrParam . '<br>';
    }  
}


  
$demo = new TestClass('this->str');  
echo '程式結束了' . '<br>';  
程式結束了
this->str
終止呼叫類中的方法
StrParam

多個註冊方法使用

<?php

function testFun1 ($strParam1 = '') 
{
    echo '第一個測試方法' . $strParam1;
    echo '<br>';
}

register_shutdown_function('testFun1', 'strParam1');
class TestClass 
{
    
    public function __construct () 
    {

        register_shutdown_function([$this, 'testFun'], 'StrParam');
    }
    function testFun($StrParam = '')  
    {  
        undefinedFunc();   //呼叫未定義函式
        echo '第二個測試方法' . '<br>';
        echo $StrParam . '<br>';
    }  
}

$demo = new TestClass();  
echo '程式結束了' . '<br>';  
程式結束了
第一個測試方法strParam1

Fatal error: Call to undefined function undefinedFunc() in D:\phpStudy\WWW\miaosha\web\index.php on line 21

以下情況自己測試下

<?php

function testFun1 ($strParam1 = '') 
{

    echo '第一個測試方法' . $strParam1;
    echo '<br>';
    // exit();   //自己測試下
}

register_shutdown_function('testFun1', 'strParam1');
class TestClass 
{
    
    public function __construct () 
    {

        register_shutdown_function([$this, 'testFun'], 'StrParam');
    }
    function testFun($StrParam = '')  
    {  
        // undefinedFunc();   //呼叫未定義函式
        echo '第二個測試方法' . '<br>';
        echo $StrParam . '<br>';
       // exit();  //自己測試下
    }  
}


  
$demo = new TestClass();  
echo '程式結束了' . '<br>';  

 

相關文章