Latest web development tutorials
×

PHP kuliah

PHP kuliah PHP pengantar singkat PHP memasang PHP tatabahasa PHP variabel PHP echo/print PHP Jenis Data PHP konstan PHP tali PHP operator PHP If...Else PHP Switch PHP susunan PHP Sorting array PHP superglobals PHP While sirkulasi PHP For sirkulasi PHP fungsi PHP Variabel sihir PHP Ruang nama PHP Berorientasi Objek

PHP bentuk

PHP bentuk PHP bentuk Authentication PHP bentuk - bidang yang harus diisi PHP bentuk - email verifikasi dan URL PHP contoh bentuk lengkap PHP $_GET variabel PHP $_POST variabel

PHP canggih Tutorial

PHP Array multidimensi PHP tanggal PHP berisi PHP berkas PHP Upload File PHP Cookie PHP Session PHP E-mail PHP keamanan E-mail PHP Error PHP Exception PHP filter PHP filter lanjutan PHP JSON

PHP 7 Fitur baru

PHP 7 Fitur baru

PHP database

PHP MySQL pengantar singkat PHP MySQL koneksi PHP MySQL Membuat database PHP MySQL Buat tabel data PHP MySQL memasukkan data PHP MySQL Menyisipkan beberapa data yang PHP MySQL Laporan disiapkan PHP MySQL membaca data 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 pengantar singkat AJAX PHP AJAX database AJAX XML AJAX pencarian real-time AJAX RSS Reader AJAX suara

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 image Processing PHP RESTful

PHP penanganan eksepsi

Pengecualian untuk mengubah script error terjadi ketika ditentukan aliran normal.


Apa yang abnormal

PHP 5 menawarkan metode baru untuk menangani berorientasi objek error.

penanganan eksepsi digunakan ketika kesalahan tertentu (pengecualian) terjadi untuk mengubah aliran normal script. Kondisi ini disebut pengecualian.

Ketika pengecualian dipicu, biasanya itu terjadi:

  • kode negara saat ini disimpan
  • eksekusi kode diaktifkan untuk fungsi yang telah ditetapkan (custom) pengecualian handler
  • Dalam beberapa kasus, prosesor dapat kembali dimulai dari kode yang tersimpan dalam kode status, mengakhiri eksekusi script atau melanjutkan script dari kode lokasi yang berbeda

Kami akan menunjukkan metode penanganan kesalahan yang berbeda:

  • Penggunaan pengecualian dasar
  • Membuat handler pengecualian kustom
  • beberapa pengecualian
  • Rethrows
  • Top-level exception handler set

Catatan: Pengecualian hanya harus menggunakan terjadi error, itu tidak boleh digunakan di titik tertentu untuk melompat ke lokasi lain dalam kode.


Penggunaan pengecualian dasar

Ketika eksepsi dilemparkan, kode berikutnya tidak dilanjutkan, PHP akan mencoba untuk menemukan pencocokan "menangkap" blok.

Jika eksepsi tidak tertangkap, tapi tidak dengan penggunaan set_exception_handler () untuk pengobatan yang sesuai, maka kesalahan serius (Fatal error) terjadi, dan pesan output "Exception Tertangkap" (eksepsi tidak tertangkap) kesalahan.

Mari kita coba untuk melemparkan pengecualian, tapi jangan menangkapnya:

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

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

Kode di atas akan mendapatkan error seperti ini:

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

Coba, melempar dan menangkap

Untuk menghindari kesalahan muncul dalam contoh di atas, kita perlu membuat kode yang sesuai untuk menangani pengecualian.

Proper penanganan pengecualian kode harus mencakup:

  1. Coba - menggunakan fungsi abnormal harus berada dalam "mencoba" blok. Jika tidak terkecuali dipicu, kode tersebut akan tetap berjalan seperti biasa. Namun, jika eksepsi dipicu, ia akan melempar pengecualian.
  2. Membuang - bagaimana untuk memicu ketentuan pengecualian. Setiap "membuang" harus sesuai dengan setidaknya satu "menangkap".
  3. Menangkap - "menangkap" blok menangkap pengecualian dan menciptakan objek yang berisi pesan pengecualian.

Mari memicu pengecualian:

<?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();
}
?>

Kode di atas akan mendapatkan error seperti ini:

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

Contoh menjelaskan:

Kode di atas melempar pengecualian dan menangkap itu:

  1. Buat checkNum () fungsi. Mendeteksi apakah nomor lebih besar dari satu. Jika ya, eksepsi dilemparkan.
  2. Sebut checkNum () fungsi dalam "mencoba" blok.
  3. checkNum () fungsi eksepsi dilemparkan.
  4. "Tangkap" block menerima pengecualian dan menciptakan objek yang berisi informasi tentang pengecualian ($ e).
  5. Dengan memanggil $ e- dari pengecualian ini objek> getMessage (), output dari pesan kesalahan untuk pengecualian.

Namun, dalam rangka untuk mengikuti "setiap lemparan harus sesuai dengan menangkap" prinsip, Anda dapat mengatur tingkat atas pengecualian handler untuk menangani kesalahan terjawab.


Membuat kelas Exception kustom

Membuat handler pengecualian kustom sangat sederhana. Kami hanya membuat kelas khusus, ketika pengecualian terjadi di PHP, Anda dapat menghubungi fungsinya. kelas harus menjadi perpanjangan dari kelas pengecualian.

Kelas pengecualian kustom mewarisi semua atribut yang didefinisikan dalam kelas PHP pengecualian, Anda mungkin ingin menambahkan fungsi kustom.

Mulai dengan membuat kelas pengecualian:

<?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();
}
?>

kelas baru ini adalah salinan dari kelas pengecualian tua, ditambah fungsi menampilkan pesan kesalahan (). Karena merupakan salinan dari kelas lama, sehingga mewarisi dari properti kelas lama dan metode, kita dapat menggunakan metode kelas pengecualian, seperti getline (), getFile () dan getMessage ().

Contoh menjelaskan:

Kode di atas melempar pengecualian, dan melalui kelas pengecualian khusus untuk menangkap itu:

  1. customException () kelas sebagai perluasan dari kelas pengecualian lama untuk menciptakan. Sehingga mewarisi semua atribut dan metode dari kelas pengecualian tua.
  2. Buat menampilkan pesan kesalahan () fungsi. Jika alamat e-mail tidak valid, fungsi mengembalikan pesan kesalahan.
  3. Variabel $ email diatur untuk tidak valid alamat e-mail tali.
  4. Pelaksanaan "mencoba" blok, karena alamat e-mail tidak valid, dan karena itu melempar pengecualian.
  5. "Tangkap" blok untuk menangkap pengecualian dan menampilkan pesan kesalahan.

beberapa pengecualian

Anda dapat menggunakan beberapa pengecualian sebagai script untuk mendeteksi berbagai situasi.

Anda dapat menggunakan beberapa blok if..else, atau blok kode switch, atau sarang beberapa pengecualian. pengecualian ini dapat menggunakan kelas eksepsi yang berbeda dan kembali pesan kesalahan yang berbeda:

<?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();
}
?>

Contoh menjelaskan:

Kode di atas tes dua kondisi, jika kondisi salah satu tidak puas, kemudian melemparkan pengecualian:

  1. customException () kelas sebagai perluasan dari kelas pengecualian lama untuk menciptakan. Sehingga mewarisi semua atribut dan metode dari kelas pengecualian tua.
  2. Buat menampilkan pesan kesalahan () fungsi. Jika alamat e-mail tidak valid, fungsi mengembalikan pesan kesalahan.
  3. Variabel $ email diatur untuk string yang merupakan alamat e-mail yang valid, tapi mengandung string "contoh".
  4. Pelaksanaan "mencoba" blok kode dalam kondisi pertama, tidak terkecuali dilemparkan.
  5. Karena e-mail berisi string "contoh", kondisi kedua memicu pengecualian.
  6. "Tangkap" blok menangkap pengecualian dan menampilkan pesan kesalahan yang sesuai.

Jika customException kelas eksepsi dilemparkan tapi tidak tertangkap customException, ditangkap hanya pengecualian dasar, di mana pengecualian pegangan.


Rethrows

Kadang-kadang, ketika eksepsi dilemparkan, Anda mungkin ingin berbeda dari cara standar untuk menanganinya. Mungkin lagi dibuang dalam "menangkap" blok.

Script harus disembunyikan dari kesalahan sistem pengguna. Untuk programmer, kesalahan sistem mungkin penting, tapi pengguna tidak tertarik pada mereka. Untuk memudahkan pengguna untuk menggunakan, Anda bisa melempar pengecualian lagi dengan pesan relatif user-friendly:

<?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();
}
?>

Contoh menjelaskan:

Kode di atas terdeteksi di alamat e-mail jika mengandung string "contoh". Jika ada, lagi, eksepsi dilemparkan:

  1. customException () kelas sebagai perluasan dari kelas pengecualian lama untuk menciptakan. Sehingga mewarisi semua atribut dan metode dari kelas pengecualian tua.
  2. Buat menampilkan pesan kesalahan () fungsi. Jika alamat e-mail tidak valid, fungsi mengembalikan pesan kesalahan.
  3. Variabel $ email diatur untuk string yang merupakan alamat e-mail yang valid, tapi mengandung string "contoh".
  4. "Coba" blok berisi lain "mencoba" blok kode, sehingga Anda dapat melempar pengecualian lagi.
  5. Karena e-mail berisi string "contoh", dan karena itu memicu pengecualian.
  6. "Tangkap" blok untuk menangkap pengecualian dan re-throw "customException".
  7. Ditangkap "customException", dan menampilkan pesan kesalahan.

Jika eksepsi tidak tertangkap di saat "mencoba" blok, terlihat untuk menangkap blok di tingkat yang lebih tinggi.


Top-level exception handler set

set_exception_handler () fungsi dapat diatur untuk menangani semua eksepsi tidak tertangkap fungsi yang ditetapkan pengguna.

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

set_exception_handler('myException');

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

Output dari kode di atas adalah sebagai berikut:

Exception: Uncaught Exception occurred

Pada kode di atas, tidak ada "menangkap" blok, tetapi tingkat atas pengecualian handler dipicu. Fungsi ini harus digunakan untuk menangkap semua eksepsi tidak tertangkap.


aturan pengecualian

  • kode penanganan eksepsi perlu ditempatkan di blok try, untuk menangkap potensi pengecualian.
  • Setiap melemparkan atau mencoba blok kode harus memiliki minimal satu yang sesuai blok catch.
  • Anda dapat menggunakan beberapa blok catch untuk menangkap berbagai jenis pengecualian.
  • Mungkin dalam blok kode try melempar menangkap blok (lagi dilempar) pengecualian.

Singkatnya: Jika Anda melempar pengecualian, Anda harus menangkapnya.