Nette\Utils\Callback::invokeSafe PHP Метод

invokeSafe() публичный статический Метод

Invokes internal PHP function with own error handler.
public static invokeSafe ( $function, array $args, $onError ) : mixed
$args array
Результат mixed
    public static function invokeSafe($function, array $args, $onError)
    {
        $prev = set_error_handler(function ($severity, $message, $file) use($onError, &$prev, $function) {
            if ($file === '' && defined('HHVM_VERSION')) {
                // https://github.com/facebook/hhvm/issues/4625
                $file = func_get_arg(5)[1]['file'];
            }
            if ($file === __FILE__) {
                $msg = preg_replace("#^{$function}\\(.*?\\): #", '', $message);
                if ($onError($msg, $severity) !== FALSE) {
                    return;
                }
            }
            return $prev ? $prev(...func_get_args()) : FALSE;
        });
        try {
            return $function(...$args);
        } finally {
            restore_error_handler();
        }
    }

Usage Example

Пример #1
0
 /**
  * Sends email.
  * @return void
  */
 public function send(Message $mail)
 {
     $tmp = clone $mail;
     $tmp->setHeader('Subject', NULL);
     $tmp->setHeader('To', NULL);
     $parts = explode(Message::EOL . Message::EOL, $tmp->generateMessage(), 2);
     $args = array(str_replace(Message::EOL, PHP_EOL, $mail->getEncodedHeader('To')), str_replace(Message::EOL, PHP_EOL, $mail->getEncodedHeader('Subject')), str_replace(Message::EOL, PHP_EOL, $parts[1]), str_replace(Message::EOL, PHP_EOL, $parts[0]));
     if ($this->commandArgs) {
         $args[] = (string) $this->commandArgs;
     }
     $res = Nette\Utils\Callback::invokeSafe('mail', $args, function ($message) use(&$info) {
         $info = ": {$message}";
     });
     if ($res === FALSE) {
         throw new Nette\InvalidStateException("Unable to send email{$info}.");
     }
 }
All Usage Examples Of Nette\Utils\Callback::invokeSafe