こんにちは!今回は、PHPのerror_clear_last関数について詳しく解説していきます。
error_clear_last関数とは?
error_clear_last関数は、最後に発生したエラー情報をクリアする関数です。PHP 7.0.0以降で使用可能です。
基本構文
void error_clear_last ( void )
基本的な使用例
1. シンプルな使用例
<?php
// エラーを発生させる
@file_get_contents("non_existent_file.txt");
// エラー情報を取得
$error = error_get_last();
print_r($error);
// エラー情報をクリア
error_clear_last();
// クリア後のエラー情報を取得
$error = error_get_last();
var_dump($error); // NULL
?>
実践的な使用例
1. エラーハンドリングクラス
<?php
class ErrorHandler {
private $lastError = null;
public function executeWithErrorHandling(callable $callback) {
// エラー情報をクリア
error_clear_last();
// 処理を実行
$result = $callback();
// エラーが発生したか確認
$this->lastError = error_get_last();
return [
'result' => $result,
'error' => $this->lastError
];
}
public function getLastError() {
return $this->lastError;
}
}
// 使用例
$handler = new ErrorHandler();
$result = $handler->executeWithErrorHandling(function() {
return @file_get_contents("non_existent_file.txt");
});
if ($result['error']) {
echo "エラーが発生しました: " . $result['error']['message'];
}
?>
2. ファイル操作での使用
<?php
function safeFileOperation($filepath, callable $operation) {
// エラー情報をクリア
error_clear_last();
// エラー制御演算子を使用して操作を実行
$result = @$operation($filepath);
// エラーが発生したか確認
$error = error_get_last();
return [
'success' => $error === null,
'result' => $result,
'error' => $error
];
}
// 使用例
$result = safeFileOperation('test.txt', function($file) {
return file_get_contents($file);
});
if (!$result['success']) {
echo "ファイル操作エラー: " . $result['error']['message'];
}
?>
3. データベース操作での使用
<?php
class DatabaseWrapper {
private $connection;
public function query($sql) {
error_clear_last();
$result = @mysqli_query($this->connection, $sql);
$error = error_get_last();
if ($error) {
throw new Exception(
"データベースエラー: " . $error['message']
);
}
return $result;
}
}
?>
エラーハンドリングパターン
1. 複数操作のエラー管理
<?php
function executeOperations(array $operations) {
$results = [];
foreach ($operations as $key => $operation) {
error_clear_last();
$results[$key] = [
'result' => @$operation(),
'error' => error_get_last()
];
}
return $results;
}
// 使用例
$operations = [
'file_read' => function() { return file_get_contents('test.txt'); },
'directory_list' => function() { return scandir('non_existent_dir'); }
];
$results = executeOperations($operations);
foreach ($results as $key => $result) {
if ($result['error']) {
echo "{$key}でエラーが発生: " . $result['error']['message'] . "\n";
}
}
?>
2. エラーロギング機能
<?php
class ErrorLogger {
private $logFile;
public function __construct($logFile) {
$this->logFile = $logFile;
}
public function executeAndLog(callable $operation) {
error_clear_last();
$result = @$operation();
$error = error_get_last();
if ($error) {
$this->logError($error);
}
return $result;
}
private function logError($error) {
$message = date('Y-m-d H:i:s') . " - Error: " .
$error['message'] . " in " .
$error['file'] . " on line " .
$error['line'] . "\n";
file_put_contents($this->logFile, $message, FILE_APPEND);
}
}
?>
注意点とベストプラクティス
1. エラー制御演算子との併用
<?php
function safeOperation(callable $callback) {
error_clear_last();
$result = @$callback(); // @を使用してエラー出力を抑制
return error_get_last();
}
?>
2. try-catchとの組み合わせ
<?php
function executeSafely(callable $callback) {
try {
error_clear_last();
$result = @$callback();
$error = error_get_last();
if ($error) {
throw new ErrorException(
$error['message'],
0,
$error['type'],
$error['file'],
$error['line']
);
}
return $result;
} catch (Exception $e) {
// エラー処理
return null;
}
}
?>
まとめ
error_clear_last関数の主なポイント:
- 最後のエラー情報をクリアできる
- エラーハンドリングの精度向上に役立つ
- エラー制御演算子(@)との相性が良い
- エラーロギングシステムに有用
活用シーン:
- ファイル操作
- データベース操作
- エラーロギング
- 複数操作の連続実行
注意点:
- PHP 7.0.0以降でのみ使用可能
- エラー制御演算子と組み合わせて使用
- try-catchブロックとの適切な組み合わせ
これらの点を理解して使用することで、より堅牢なエラーハンドリングが実装できます。
以上で、error_clear_last関数の解説を終わります。
ご質問やご不明点があれば、お気軽にコメントしてください!