このエラーをキャッチしたい:
_$a[1] = 'jfksjfks';
try {
$b = $a[0];
} catch (\Exception $e) {
echo "jsdlkjflsjfkjl";
}
_
編集:実際、次の行でこのエラーが発生しました:$parse = $xml->children[0]->children[0]->toArray();
次のようなカスタムエラーハンドラを定義する必要があります。
<?php
set_error_handler('exceptions_error_handler');
function exceptions_error_handler($severity, $message, $filename, $lineno) {
if (error_reporting() == 0) {
return;
}
if (error_reporting() & $severity) {
throw new ErrorException($message, 0, $severity, $filename, $lineno);
}
}
$a[1] = 'jfksjfks';
try {
$b = $a[0];
} catch (Exception $e) {
echo "jsdlkjflsjfkjl";
}
Try/catchブロックを使用することはできません。これは例外であり、エラーではないためです。
使用する前に常にオフセットを試行します。
if( isset( $a[ 0 ] ) { $b = $a[ 0 ]; }
私はそれが2016年であることを知っていますが、誰かがこの投稿にアクセスした場合に備えて。
array_key_exists($index, $array)
メソッドを使用して、例外が発生しないようにすることができます。
$index = 99999;
$array = [1,2,3,4,5,6];
if(!array_key_exists($index, $array))
{
//Throw myCustomException;
}
$a[1] = 'jfksjfks';
try {
$offset = 0;
if(isset($a[$offset]))
$b = $a[$offset];
else
throw new Exception("Notice: Undefined offset: ".$offset);
} catch (Exception $e) {
echo $e->getMessage();
}
または、非常に一時的な例外を作成する非効率性なし:
$a[1] = 'jfksjfks';
$offset = 0;
if(isset($a[$offset]))
$b = $a[$offset];
else
echo "Notice: Undefined offset: ".$offset;
通常、try-catchブロックで通知をキャッチすることはできません。ただし、通知を例外に変換できます!この方法を使用します。
function get_notice($output)
{
if (($noticeStartPoint = strpos($output, "<b>Notice</b>:")) !== false) {
$position = $noticeStartPoint;
for ($i = 0; $i < 3; $i++)
$position = strpos($output, "</b>", $position) + 1;
$noticeEndPoint = $position;
$noticeLength = $noticeEndPoint + 3 - $noticeStartPoint;
$noticeMessage = substr($output, $noticeStartPoint, $noticeLength);
throw new \Exception($noticeMessage);
} else
echo $output;
}
try {
ob_start();
// Codes here
$codeOutput = ob_get_clean();
get_notice($codeOutput);
} catch (\Exception $exception) {
// Catch (notice also)!
}
また、この関数を使用して警告をキャッチできます。関数名をget_warningに変更し、"<b>Notice</b>:"
から"<b>Warning</b>:"
。
注:この関数は、以下を含む無害な出力をキャッチします。
<b>通知</ b>:
ただし、この問題を回避するには、単に次のように変更します。
<b>注意:</ b>