Najlepszy samouczek obsługa wyjątków PHP W 2024 r. W tym samouczku możesz dowiedzieć się Co to jest nienormalne,Podstawowe zastosowanie wyjątku,Spróbuj, rzucać i łapać,Przykłady wyjaśnić:,Tworzenie niestandardowej klasy Exception,Przykłady wyjaśnić:,Wiele wyjątki,Przykłady wyjaśnić:,Rethrows,Przykłady wyjaśnić:,Najwyższego poziomu obsługi wyjątku zestaw,wyjątek,

obsługa wyjątków PHP

Wyjątek na zmianę błąd skryptu pojawia się, gdy podano prawidłowy przepływ.


Co to jest nienormalne

PHP 5 oferuje nową metodę obsługi błędów obiektowy.

Obsługa wyjątków jest używany, gdy określony błąd (wyjątek) występuje na zmianę normalnego przepływu skryptu. Stan ten nazywany jest wyjątek.

Gdy wyjątek zostanie uruchomiony, zazwyczaj następuje:

  • Aktualny stan kodu jest zapisany
  • wykonywanie kodu zostanie przełączony w zdefiniowanym (niestandardowe) funkcji obsługi wyjątków
  • W niektórych przypadkach, procesor może być ponownie uruchomiony z kodu zapisanego w kodzie statusu zakończenia wykonywania skryptu lub kontynuować skrypt z innym kodem lokalizacji

Pokażemy różne metody obsługi błędów:

  • Podstawowe zastosowanie wyjątku
  • Tworzenie niestandardowej procedury obsługi wyjątków
  • Wiele wyjątki
  • Rethrows
  • Najwyższego poziomu obsługi wyjątku zestaw

Uwaga: Wyjątki powinny stosować tylko w przypadku wystąpienia błędu, nie należy stosować w określonym miejscu, aby przejść do następnego miejsca w kodzie.


Podstawowe zastosowanie wyjątku

Gdy jest wyjątek, późniejsze Kod nie dokonuje, PHP postara się znaleźć pasujący "złapać" blok.

Jeśli wyjątek nie zostanie złapany, ale żaden z wykorzystaniem set_exception_handler () dla odpowiedniej obróbce, to poważne błędu (błąd krytyczny) występuje, a wiadomości wyjście "Uncaught wyjątek" (przechwycony wyjątku) o błędach.

Spróbujmy wyjątek, ale nie złapać go:

<?php
// 创建一个有异常处理的函数
function checkNum($number)
{
	if($number>1)
	{
		throw new Exception("Value must be 1 or below");
	}
	return true;
}

// 触发异常
checkNum(2);
?>

Powyższy kod będzie się błąd podobny do tego:

Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below' in /www/w3big/test/test.php:7 Stack trace: #0 /www/w3big/test/test.php(13): checkNum(2) #1 {main} thrown in /www/w3big/test/test.php on line 7

Spróbuj, rzucać i łapać

Aby uniknąć błędów występujących w powyższym przykładzie, musimy stworzyć odpowiedni kod do obsługi wyjątków.

Prawidłowe obchodzenie się kod wyjątku powinien zawierać:

  1. Spróbuj - stosując nieprawidłową czynność powinna być umieszczona w "try" bloku. Jeśli żaden wyjątek nie zostanie uruchomiony, kod będzie nadal tak jak zwykle. Jednakże, jeśli wyjątek zostanie uruchomiony, będzie to wyjątek.
  2. Rzut - w jaki sposób wyzwolić przepisy wyjątków. Każdy "rzut" musi odpowiadać co najmniej jeden "złapać".
  3. Łap - "złapać" bloku łapie wyjątek i tworzy obiekt zawierający komunikat wyjątku.

Niech wywołać wyjątek:

<?php
// 创建一个有异常处理的函数
function checkNum($number)
{
	if($number>1)
	{
		throw new Exception("变量值必须小于等于 1");
	}
		return true;
}
	
// 在 try 块 触发异常
try
{
	checkNum(2);
	// 如果抛出异常,以下文本不会输出
	echo '如果输出该内容,说明 $number 变量';
}
// 捕获异常
catch(Exception $e)
{
	echo 'Message: ' .$e->getMessage();
}
?>

Powyższy kod pojawia się błąd jak poniżej:

Message: 变量值必须小于等于 1

Przykłady wyjaśnić:

Powyższy kod wygeneruje wyjątek i łapie go:

  1. Tworzenie checkNum funkcję (). Wykrywa, czy liczba jest większa niż jeden. Jeśli tak, to jest wyjątek.
  2. Wywołanie funkcji checkNum () w "try" bloku.
  3. checkNum () zostanie zgłoszony wyjątek funkcji.
  4. "Złap" Blok otrzymuje wyjątek i tworzy obiekt, który zawiera informacje o wyjątku ($ e).
  5. Wywołując $ e- z tego wyjątku obiektów> getMessage (), wyjście z komunikatem o błędzie za wyjątkiem.

Jednakże, w celu śledzenia "każdy rzut musi odpowiadać catch" zasady, można założyć obsługi wyjątku najwyższego poziomu obsługi błędów nieodebranych.


Tworzenie niestandardowej klasy Exception

Tworzenie niestandardowej procedury obsługi wyjątku jest bardzo prosta. Po prostu utworzyć specjalną klasę, gdy wystąpi wyjątek w PHP, możesz zadzwonić do jego funkcji. Klasa musi stanowić rozszerzenie klasy wyjątków.

Zwyczaj klasy wyjątku dziedziczy wszystkie atrybuty zdefiniowane w klasie wyjątku PHP, może chcesz dodać funkcje niestandardowe.

Zacznij od utworzenia klasy wyjątków:

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 错误信息
		$errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile()
		.': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址';
		return $errorMsg;
	}
}

$email = "someone@examplepl.com";

try
{
	// 检测邮箱
	if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
	{
		// 如果是个不合法的邮箱地址,抛出异常
		throw new customException($email);
	}
}

catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>

Ta nowa klasa jest kopią starej klasy wyjątków, plus funkcja errorMessage (). Ponieważ jest to kopia starej klasy, więc dziedziczy z dawnych właściwości i metod klasy, możemy użyć metody klasy wyjątków, takich jak getline (), getfile () i GetMessage ().

Przykłady wyjaśnić:

Powyższy kod wygeneruje wyjątek, a dzięki niestandardowej klasy wyjątków, aby ją zdobyć:

  1. customException () klasy jako przedłużenie starej klasy wyjątków tworzenia. Tak, że zachowane zostały wszystkie cechy i sposoby starej klasy wyjątku.
  2. Tworzenie errorMessage funkcję (). Jeżeli adres e-mail jest nieprawidłowy, funkcja zwraca komunikat o błędzie.
  3. Zmienna $ e-mail jest ustawiona na nieprawidłowy adres e-mail ciąg.
  4. Realizacja "try" bloku, ponieważ adres e-mail nie jest ważny, a zatem zgłasza wyjątek.
  5. "Złap" Blok do połowu wyjątek i wyświetla komunikat o błędzie.

Wiele wyjątki

Można użyć wielu wyjątków jako skrypt do wykrywania różnych sytuacjach.

Można używać wielu blok ifplelse lub blok przełącznika kodu lub gniazdo wiele wyjątków. Wyjątki te mogą korzystać z różnych klas wyjątek i zwracają różne komunikaty o błędach:

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 错误信息
		$errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile()
		.': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址';
		return $errorMsg;
	}
}

$email = "someone@example.com";

try
{
	// 检测邮箱
	if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
	{
		// 如果是个不合法的邮箱地址,抛出异常
		throw new customException($email);
	}
	// 检测 "example" 是否在邮箱地址中
	if(strpos($email, "example") !== FALSE)
	{
		throw new Exception("$email 是 example 邮箱");
	}
}
catch (customException $e)
{
	echo $e->errorMessage();
}
catch(Exception $e)
{
	echo $e->getMessage();
}
?>

Przykłady wyjaśnić:

Powyższy kod testuje dwa warunki, jeśli jeden warunek nie jest spełniony, to wyjątek:

  1. customException () klasy jako przedłużenie starej klasy wyjątków tworzenia. Tak, że zachowane zostały wszystkie cechy i sposoby starej klasy wyjątku.
  2. Tworzenie errorMessage funkcję (). Jeżeli adres e-mail jest nieprawidłowy, funkcja zwraca komunikat o błędzie.
  3. Zmienna $ e-mail jest ustawiona na sznurku, który jest prawidłowy adres e-mail, ale zawiera ciąg "przykładowy".
  4. Realizacja "try" bloku kodu w pierwszym stanie, brak jest wyjątek.
  5. Ponieważ e-mail zawiera ciąg "przykład", drugi warunek wywołuje wyjątek.
  6. "Złap" Blok przechwytuje wyjątek i wyświetla odpowiedni komunikat o błędzie.

Jeśli customException klasa jest wyjątek, ale nie złapany customException, zrobione tylko bazowej wyjątek, gdzie wyjątki uchwyt.


Rethrows

Czasem, gdy jest wyjątek, może chcesz różnią się od standardowego sposobu, by go obsłużyć. Może być ponownie rzucony w "złapać" bloku.

Skrypt powinien być ukryte przed błędami systemu użytkownika. Dla programistów, błędy systemowe mogą być ważne, ale użytkownik nie jest nimi zainteresowany. Aby ułatwić użytkownikom korzystanie można wyjątek dzięki względnie przyjazny użytkownikowi komunikat:

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 错误信息
		$errorMsg = $this->getMessage().' 不是一个合法的 E-Mail 地址。';
		return $errorMsg;
	}
}

$email = "someone@example.com";

try
{
	try
	{
		// 检测 "example" 是否在邮箱地址中
		if(strpos($email, "example") !== FALSE)
		{
			// 如果是个不合法的邮箱地址,抛出异常
			throw new Exception($email);
		}
	}
	catch(Exception $e)
	{
		// 重新抛出异常
		throw new customException($email);
	}
}
catch (customException $e)
{
	// 显示自定义信息
	echo $e->errorMessage();
}
?>

Przykłady wyjaśnić:

Powyższy kod jest wykrywany w adresie e-mail, jeśli zawiera ciąg "przykładowy". Jeśli tak, to znowu jest wyjątek:

  1. customException () klasy jako przedłużenie starej klasy wyjątków tworzenia. Tak, że zachowane zostały wszystkie cechy i sposoby starej klasy wyjątku.
  2. Tworzenie errorMessage funkcję (). Jeżeli adres e-mail jest nieprawidłowy, funkcja zwraca komunikat o błędzie.
  3. Zmienna $ e-mail jest ustawiona na sznurku, który jest prawidłowy adres e-mail, ale zawiera ciąg "przykładowy".
  4. "Try" blok zawiera kolejną "try" blok kodu, dzięki czemu można wyjątek ponownie.
  5. Ponieważ e-mail zawiera ciąg "przykład", a tym samym wywołać wyjątek.
  6. "Złap" Blok do połowu wyjątek i re-throw "customException".
  7. Schwytany "customException" i wyświetla komunikat o błędzie.

Jeśli wyjątek nie zostanie złapany w aktualnym "try" bloku, wygląda na bloku catch na wyższym poziomie.


Najwyższego poziomu obsługi wyjątku zestaw

set_exception_handler function () może być ustawiony do obsługi wszystkich przechwycony wyjątek funkcji zdefiniowanych przez użytkownika.

<?php
function myException($exception)
{
	echo "<b>Exception:</b> " , $exception->getMessage();
}

set_exception_handler('myException');

throw new Exception('Uncaught Exception occurred');
?>

Wyjście kodu powyżej są następujące:

Exception: Uncaught Exception occurred

W powyższym kodzie, nie ma "złapać" bloku, ale obsługi wyjątku najwyższego poziomu wyzwolone. Funkcja ta powinna być wykorzystywane do przechwytywania wszystkich przechwycony wyjątek.


wyjątek

  • Kod obsługi wyjątków musi być umieszczony w bloku try, aby złapać potencjalne wyjątki.
  • Każdy rzucać nim ani blok kodu musi mieć co najmniej jeden odpowiedni blok catch.
  • Można korzystać z wielu bloków catch złapać różne rodzaje wyjątków.
  • Może być w bloku kodu try rzuca blok catch (znowu) rzucony wyjątek.

W skrócie: Jeśli wyjątek, trzeba go złapać.

obsługa wyjątków PHP
10/30