2013-06-14 2 views
1

Я занимаюсь обработкой исключений с использованием некоторого кода PEAR и хотел бы (a) написать свой собственный обработчик ошибок и (b) передать больше аргументов, чем просто событие запуска. Или что-то вроде этого:Могу ли я передать дополнительные аргументы в обработчик для PEAR_ERROR_CALLBACK?

... 
$pear_thing->setErrorHandling(PEAR_ERROR_CALLBACK, 'my_handler', 'something else'); 
... 

function my_handler($e, $other_arg) { 
    ... 
} 

Этот код не работает (второй аргумент никогда не будет передан my_handler, есть ли способ обойти это

+0

Если что-то еще известно в момент привязки обработчика, то вы можете использовать iefe – Orangepill

+0

Является ли что-то еще чем-то, что будет известно в момент создания обработчика ошибок? – Orangepill

ответ

1

Если дополнительное значение является то, что вы знаете? в то время, когда обработчик установлен, то вы можете сделать IEFE (Сразу Выполненная функция Expression)

$handler = function ($otherArg) { 
      return function($e) use ($otherArg){ 
       .... 
      }; 
}; 

затем, когда вы связываете функцию, которую вы можете сделать это

$pear_thing->setErrorHandling(PEAR_ERROR_CALLBACK,$handler('something else')); 

В этом случае $ handler - это функция, которая возвращает замыкание, закрывающееся вокруг аргумента, переданного в обработчик $.

+0

Хм - это не работает для меня; Я получаю синтаксические ошибки, сначала в ключе 'var', а затем (inf' var' удаляется) во втором '}', предположительно потому, что я делаю это в определении функции, а не в обработчике объекта/метода. BTW, то, что я пытаюсь передать обработчику, является переменной, определенной ранее в этой функции. Таким образом, моя попытка установки обработчика выглядит как '$ pear_thing-> setErrorHandling (PEAR_ERROR_CALLBACK, $ handler ($ the_variable));' –

+0

. Var был мной, попавшим в javascript-режим при работе с замыканиями, которые были ошибкой. второй} необходим, поскольку он закрывает внешнюю функцию. Стоит отметить, что это решение будет работать только в php 5.3 или выше. – Orangepill

+0

(1) Настроено так много :) (2) Я вижу, что совпадение происходит со второй скобкой, но я дважды и трижды проверял, чтобы мой код соответствовал вашим, а php 5.4.15 - определенно бросая синтаксическую ошибку во второй фигурной скобке. Я знаю, что я прошу о помощи здесь, но вы уверены, что этот пример прав? –

Смежные вопросы