Latest web development tutorials
×

PHP kurs

PHP kurs PHP krótkie wprowadzenie PHP zainstalować PHP gramatyka PHP zmienna PHP echo/print PHP Typy danych PHP stały PHP sznur PHP operatorzy PHP If...Else PHP Switch PHP szyk PHP Sortowanie tablicy PHP superglobalne PHP While krążenie PHP For krążenie PHP funkcja PHP Magiczne Zmienne PHP Przestrzenie nazw PHP Obiektowe

PHP forma

PHP forma PHP Uwierzytelnianie za pomocą formularzy PHP forma - wymagane pola PHP forma - Weryfikacja e-mail i adres URL PHP Kompletna wystąpienie formularza PHP $_GET zmienna PHP $_POST zmienna

PHP zaawansowane Tutorial

PHP Tablice wielowymiarowe PHP data PHP zawierać PHP plik PHP Prześlij plik PHP Cookie PHP Session PHP E-mail PHP bezpieczeństwo E-mail PHP Error PHP Exception PHP filtr PHP Filtr zaawansowany PHP JSON

PHP 7 Nowe funkcje

PHP 7 Nowe funkcje

PHP baza danych

PHP MySQL krótkie wprowadzenie PHP MySQL połączenie PHP MySQL Tworzenie bazy danych PHP MySQL Tworzenie tabeli danych PHP MySQL Należy wprowadzić dane PHP MySQL Wstawić wiele danych PHP MySQL Przygotowane sprawozdania PHP MySQL odczytać dane PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX krótkie wprowadzenie AJAX PHP AJAX baza danych AJAX XML AJAX Wyszukiwanie w czasie rzeczywistym AJAX RSS Reader AJAX głosowanie

PHP Reference Manual

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP Przetwarzanie obrazu PHP RESTful

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 = "[email protected]";

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 if..else 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 = "[email protected]";

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 = "[email protected]";

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ć.