PHP - 오류 처리

안녕하세요, PHP 개발자 지망생 여러분! 오늘은 PHP의 흥미로운 오류 처리 세계로 창natation합니다. 프로그래밍에 새로운 사람이라면 걱정하지 마세요; 저는 여러 개념을 단계별로 안내해드릴 것입니다. 수년 동안 수많은 학생들에게 가르쳐온 경험을 바탕으로 말이죠. 그럼 커피 한 잔을 마시며(또는 당신의 좋아하는 음료를 마시며), 시작해보겠습니다!

PHP - Error Handling

die() 함수

먼저 간단하지만 강력한 함수 die()를 알아보겠습니다. 이 함수는 코드의 긴급 정지 버튼과 같습니다. PHP가 die()를 만나면 즉시 실행을 중지하고 메시지를 출력합니다.

기본 예제를 보겠습니다:

<?php
$file = fopen("important_file.txt", "r");
if (!$file) {
die("아니야! 파일을 열 수 없습니다.");
}
echo "이 메시지를 본다면 파일이 성공적으로 열렸습니다!";
?>

이 코드에서 우리는 파일을 열려고 시도합니다. 실패하면 die()가 모든 것을 중지하고 우리의 맞춤형 메시지를 표시합니다. PHP에게 "이 작업을 수행할 수 없다면 중지하고 알려줘!"라고 말하는 것과 같습니다.

오류 처리 함수

이제 맞춤형 오류 처리 함수로 우리의 오류 처리 게임을 한 단계 업그레이드해보겠습니다. 이는 자신만의 개인 보조를 오류 처리에 동원하는 것과 같습니다.

다음과 같이 만들 수 있습니다:

<?php
function myErrorHandler($errno, $errstr, $errfile, $errline) {
echo "<b>oops! 무언가 잘못되었습니다:</b><br>";
echo "오류: [$errno] $errstr<br>";
echo "오류가 발생한 줄 $errline in $errfile<br>";
}

set_error_handler("myErrorHandler");

// 오류를 유발해 보겠습니다
echo($undefined_variable);
?>

이 예제에서 우리는 myErrorHandler라는 함수를 만들어 발생하는 모든 오류에 대한 자세한 정보를 제공합니다. 그런 다음 set_error_handler()를 사용하여 PHP가 이 함수를 사용하도록 지정합니다. 정의되지 않은 변수를 echo하는 시도를 할 때, 우리의 맞춤형 오류 처리기가 작동하여 친절하고 정보가 풍부한 메시지를 제공합니다.

ArithmeticError 클래스

PHP 7에서는 여러 가지 새로운 오류 클래스를 도입했습니다. 그 중 하나는 ArithmeticError입니다. 이 클래스는 수학 연산 중 오류가 발생할 때 던집니다.

다음과 같이 사용해보겠습니다:

<?php
$number = 1;
try {
$result = $number << -1;
} catch (ArithmeticError $e) {
echo "oops! 수학 오류가 발생했습니다: " . $e->getMessage();
}
?>

여기서 우리는 음수로의 비트 이동 연산을 시도하고 있습니다. 이는 허용되지 않습니다. PHP는 ArithmeticError를捕獲하고 우리는 그것을 부드럽게 처리합니다.

DivisionByZeroError

수학 수업에서 선생님이 "0으로 나눌 수 없다!"고 말했던 기억이 나시나요? PHP도 그 기억을 가지고 있습니다! DivisionByZeroError는 0으로 나누는 시도 시 던집니다.

다음과 같이 사용해보겠습니다:

<?php
function divide($numerator, $denominator) {
if ($denominator == 0) {
throw new DivisionByZeroError("와우 거기! 0으로 나눌 수 없어!");
}
return $numerator / $denominator;
}

try {
echo divide(10, 0);
} catch (DivisionByZeroError $e) {
echo "오류: " . $e->getMessage();
}
?>

이 예제에서 우리는 분모가 0인지 확인하는 divide 함수를 만들었습니다. 그렇다면 DivisionByZeroError를 던져 맞춤형 메시지를 제공합니다.

ArgumentCountError

언제든지 누군가에게 전화를 걸었지만 말할 것을 까먹은 적이 있나요? ArgumentCountError는 PHP가 "허, 중요한 것을 말해주지 않았어!"라고 말하는 방식입니다!

다음과 같이 사용해보겠습니다:

<?php
function greet($name) {
return "안녕하세요, $name!";
}

try {
echo greet();  // 이름을 제공하지 않았습니다!
} catch (ArgumentCountError $e) {
echo "오류: " . $e->getMessage();
}
?>

이 경우 우리는 greet 함수에 이름을 제공하지 않고 호출하고 있습니다. PHP는 ArgumentCountError를 던져 우리는 그것을捕獲하고 처리합니다.

TypeError

TypeError는 값이 기대하는 형식과 다를 때 던집니다. 피자를 주문했지만 햄버거를 가져온 것과 같습니다!

다음과 같이 사용해보겠습니다:

<?php
function addNumbers(int $a, int $b) {
return $a + $b;
}

try {
echo addNumbers("5", "10");  // 문자열을 전달하고 있습니다, 정수가 아닙니다!
} catch (TypeError $e) {
echo "oops! " . $e->getMessage();
}
?>

여기서 우리의 addNumbers 함수는 정수를 기대하지만, 우리는 문자열을 전달하고 있습니다. PHP는 형식 불일치를捕獲하고 TypeError를 던집니다.

PHP에서 예외 처리

PHP의 예외는 서커스의 안전망과 같습니다. 그들은 오류가 큰 문제로 이어되기 전에 잡아줍니다. 예외를 어떻게 사용하는지 살펴보겠습니다:

<?php
function checkAge($age) {
if ($age < 0) {
throw new Exception("나이는 음수일 수 없습니다!");
}
if ($age < 18) {
throw new Exception("죄송합니다, 18세 이상이어야 합니다.");
}
return "환영합니다! 당신은 충분히 나이가 있습니다.";
}

try {
echo checkAge(15);
} catch (Exception $e) {
echo "오류: " . $e->getMessage();
} finally {
echo "<br>나이 확인기를 사용해주셔서 감사합니다!";
}
?>

이 예제에서 우리는 누군가가 입장할 수 있는지 확인하고 있습니다. 우리는 try로 코드를 시도하고, catch로 예외를 처리하며, finally는 예외가 던져졌는지 여부와 관계없이 실행할 코드를 지정합니다.

맞춤형 예외 처리기 만들기

마지막으로, 우리는 자신만의 맞춤형 예외 처리기를 만들어보겠습니다. 이는 자신만의 오류 메시지 시스템을 설계하는 것과 같습니다!

<?php
class CustomException extends Exception {
public function errorMessage() {
$errorMsg = '오류가 발생했습니다: 줄 '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b>은(는) 유효한 이메일 주소가 아닙니다';
return $errorMsg;
}
}

$email = "[email protected]";

try {
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
throw new CustomException($email);
}
} catch (CustomException $e) {
echo $e->errorMessage();
}
?>

여기서 우리는 CustomException 클래스를 만들어 유효하지 않은 이메일 주소에 대한 자세한 오류 메시지를 제공합니다. 그런 다음 이 맞춤형 예외를 사용하여 이메일 주소를 확인합니다.

이렇게 해서 우리는 PHP의 다양한 오류 처리 기술을 다루었습니다. 좋은 오류 처리는 안전벨트와 같습니다 - 필요할 때까지는 불필요하다고 느껴질 수 있지만, 필요할 때는 필수적입니다. 이 개념들을 계속 연습하면 얼마 지나지 않아 오류를 처리하는 프로가 될 것입니다!

행복하게 코딩하세요, 그리고 기억하세요 - 프로그래밍에서 오류는 배우고 코드를 개선할 기회입니다!

Credits: Image by storyset