Блоки try-catch PHP: могут они для ловли недопустимых типов аргумента?

Это заменяет последнюю запятую новой строкой:

ls -1 | tr '\n' ',' | sed 's/,$/\n/'

ls -m включает переводы строки с шириной экрана (например, 80-й).

В основном Bash (только ls является внешним):

saveIFS=$IFS; IFS= 

Использование readarray (он же mapfile) в Bash 4:

readarray -t files < <(ls -1)
saveIFS=$IFS
IFS=,
list=${files[*]}
IFS=$saveIFS

Благодаря gniourf_gniourf для предложения.

\n' files=($(ls -1)) IFS=, list=${files[*]} IFS=$saveIFS

Использование readarray (он же mapfile) в Bash 4:

readarray -t files < <(ls -1)
saveIFS=$IFS
IFS=,
list=${files[*]}
IFS=$saveIFS

Благодаря gniourf_gniourf для предложения.

14
задан dreftymac 22 January 2016 в 17:07
поделиться

4 ответа

Warnings and notices are not technically exceptions in PHP. To catch an exception it has to be explicitly thrown, and many of the built-in libraries of functions do not throw exceptions (mostly because they were written before PHP supported exceptions).

It would have been nice if somehow exceptions were built on top of the existing notice/warning/error framework but perhaps that is asking too much.

13
ответ дан 1 December 2019 в 10:19
поделиться

Вы можете перехватить такие ошибки, преобразовав каждую ошибку в исключение. Я установил небольшую среду обработки ошибок . Просто протестируйте - будет работать.

2
ответ дан 1 December 2019 в 10:19
поделиться

Предоставленный вами код всегда будет выдавать предупреждение, но вы можете использовать set_error_handler , чтобы указать, как обрабатывать предупреждение; то есть вы можете вызвать исключение. Кроме того, вы можете использовать restore_error_handler , чтобы вернуться к обработке ошибок по умолчанию, когда вы закончите.

function errorHandler($errno, $errstr, $errfile, $errline) {
    throw new Exception($errstr, $errno);
}
set_error_handler('errorHandler');
11
ответ дан 1 December 2019 в 10:19
поделиться

Единственный способ, который я могу придумать, - это сделать следующее:

try{
    $vtest = '';
    if(is_array($vtest)){
        print(array_pop($vtest));
    }
    else{
        throw new NotArrayException()
    }
}catch(NotArrayException $exx){}

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

    $vtest = '';
    if(is_array($vtest)){
        print(array_pop($vtest));
    }
0
ответ дан 1 December 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: