Как проверить, вызывается ли функция в последний раз в PHP - PullRequest
2 голосов
/ 03 октября 2010

Я хочу проверить, вызывается ли функция в последний раз. Рассмотрим следующий пример кода,

function foo(){
    if( this is the last call ) {
         echo 'this is the last call of this function';
    }
}

foo(); // should not print
foo(); // should not print
foo(); // since this is the last call, it should print

В моем проекте мне нужно, чтобы в функции присутствовал оператор условия.

У меня была идея использовать константы / глобальные переменные / счетчики, но я не знаю, как их реализовать. Есть идеи для определения последнего вызова функции?

Ответы [ 5 ]

1 голос
/ 03 октября 2010

Если вы знаете, где в коде происходит последний вызов, вы можете сделать это с помощью глобальной переменной, например,

function foo(){
    if($GLOBALS['debug_foo']) {
         echo 'this is the last call of this function';
    }
}

$GLOBALS['debug_foo']=false;

foo(); // should not print
foo(); // should not print

$GLOBALS['debug_foo']=true;

foo(); // since this is the last call, it should print

См. Справочную страницу PHP по переменная область действия для получения дополнительной помощи.

Если вы не можете указать в коде, когда выполняется последний вызов, вы можете использовать register_shutdown_function , например,

function shutdown()
{
    echo $GLOBALS['foo_dump'];
}

function foo()
{
    $GLOBALS['foo_dump']='record some information here';   
}

//make sure we get notified when our script ends...
register_shutdown_function('shutdown');

foo(); // should not print
foo(); // should not print
foo(); // won't print anything, but when the script ends, our
       // shutdown function will print the last captured bit
       // of diagnostic info
1 голос
/ 03 октября 2010

Вы пытались использовать встроенную функцию отключения ?

0 голосов
/ 03 октября 2010

Если вы новичок в PHP, и если я правильно предполагаю намерение этой программы, не рекомендуется придерживаться такой логики: функция угадывает и решает сама, когда ее вызывают в последний раз. Такое поведение следует использовать в более глобальном масштабе.

Например, вы можете использовать логическое значение

  function foo($last=false){
      if( $last ) {
           echo 'this is the last call of this function';
      }
  }

  foo(); // should not print
  foo(); // should not print
  foo(true); // since this is the last call, it should print
0 голосов
/ 03 октября 2010

Вы пытаетесь предсказать будущее - что невозможно.Но вы можете подражать этому.Функция будет выполнять свою работу каждый раз, вы будете кэшировать результат каждый раз.
Вы будете использовать результат только в последний раз.
С другой стороны, в php.ini есть возможность автоматическидобавьте скрипт в конец процесса.Вы можете поместить вызов функции там.(Или используйте отключение регистра, упомянутое выше).И последнее: кажется, у вас серьезный поток в дизайне, или вы можете уточнить?

0 голосов
/ 03 октября 2010

Я не думаю, что это возможно.У вас нет возможности узнать, когда будет последний звонок.

Редактировать: Глобалы не помогут.Как сказал кто-то еще, вы пытаетесь предсказать будущее.Представьте, что вы решили выключить свой мобильный телефон по окончании последнего звонка, который вы получили за день.Вы не можете контролировать, кто может позвонить вам и когда.

...