Может ли скрипт PHP выполнить общий код перед выходом ()? - PullRequest
6 голосов
/ 17 сентября 2009

Как можно сделать что-то подобное в скрипте PHP?

 code{
      $result1 = task1() or break;
      $result2 = task2() or break;
 }

 common_code();
 exit();

Ответы [ 3 ]

20 голосов
/ 17 сентября 2009

В справочном документе PHP вы можете указать функцию, которая вызывается после exit (), но до завершения сценария.

Не стесняйтесь проверять документацию для получения дополнительной информации http://us3.php.net/manual/en/function.register-shutdown-function.php

<?php
function shutdown()
{
    // This is our shutdown function, in 
    // here we can do any last operations
    // before the script is complete.

    echo 'Script executed with success', PHP_EOL;
}

register_shutdown_function('shutdown');
?>
6 голосов
/ 17 сентября 2009

если вы используете ООП, вы можете поместить код, который вы хотите выполнить при выходе, в деструктор вашего класса.

class example{
   function __destruct(){
      echo "Exiting";
   }
}
3 голосов
/ 17 сентября 2009

Ваш пример, вероятно, слишком упрощен, так как его легко переписать следующим образом:

if($result1 = task1()) {
    $result2 = task2();
}

common_code();
exit;

Возможно, вы пытаетесь построить управление потоком следующим образом:

do {
    $result1 = task1() or break;
    $result2 = task2() or break;
    $result3 = task3() or break;
    $result4 = task4() or break;
    // etc
} while(false);
common_code();
exit;

Вы также можете использовать switch():

switch(false) {
case $result1 = task1(): break;
case $result2 = task2(): break;
case $result3 = task3(): break;
case $result4 = task4(): break;
}

common_code();
exit;

Или в PHP 5.3 вы можете использовать goto:

if(!$result1 = task1()) goto common;
if(!$result2 = task2()) goto common;
if(!$result3 = task3()) goto common;
if(!$result4 = task4()) goto common;

common:
echo "common code\n";
exit;
...