Hướng dẫn dùng kotlin exceptions trong PHP

Hàm serialize() sẽ mã hóa giá trị biến truyền vào thành một chuỗi đặc biệt, hàm trả về kết quả là chuỗi được mã hóa.

Hướng dẫn dùng kotlin exceptions trong PHP

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Lưu ý: hàm serialize() có thể sử dụng với một mảng dữ liệu.

Cú pháp

Cú pháp: serialize( $var);

Trong đó:

Bài viết này được đăng tại [free tuts .net]

  • $var là biến cần chuyển đổi.

Ví dụ

Code

$var = array(
	"php",
	2408,
	"css",
	"freetuts.net"
);
$varSerialize = serialize($var);
echo "
";
	print_r($varSerialize);
echo "
";

Kết quả

a:4:{i:0;s:3:"php";i:1;i:2408;i:2;s:3:"css";i:3;s:12:"freetuts.net";}

Tham khảo: php.net

Trong quá trình thực thi phần mềm sẽ có những lỗi phát sinh mà trong quá trình coding ta đã dự đoán hoặc chưa dự đoán được. Việc kiểm soát các biệt lệ giúp cho phần mềm tiếp tục hoạt động nếu lỗi xảy ra hoặc cũng đưa ra các gợi ý bên phía User Problem

Xử lý ngoại lệ trong Kotlin cũng tượng như trong Java. Và chúng ta đều biết, ngoại lệ là những lỗi có thể phát sinh lúc thực thi. Chẳng hạn như đọc một file không còn tại. Hoặc kết nối với database không có sẵn.

1. Cú pháp

try {
    Xử lý
} catch (e: ExceptionName) {
    Xử lý ngoại lệ
} finally {
    Giải phóng tài nguyên
}

Để ném ra ngoại lệ chúng ta sử dụng throw. Tuy nhiên để bắt ngoại lệ, chúng ta sử dụng try…catch như trên. Đối với finally có thể bỏ qua khi viết try…catch và những câu lệnh bên trong nó luôn luôn được thực thi bất kể cho xảy ra ngoại lệ hay không.

Sau đây là một số exception thông dụng

  1. ArithmeticException: Ngoại lệ liên quan đến tính toán số học
  2. NumberFormatException: Ngoại lệ liên quan đến định dạng số
  3. IllegalArgumentException: Ngoại lệ liên quan đến đối số không phù hợp
  4. Exception: Ngoại lệ tổng quát nhất

Khi xử lý ngoại lệ, chúng ta có thể chỉ định cụ thể từng ngoại lệ trên hoặc sử dụng Exception.

2. Ví dụ

fun main(args: Array) {
   try {
      val age:Int = 12
      val name:String = "Lê Hồng Kỳ"
      name.toInt()
   } catch(e:Exception) {
      e.printStackTrace()
   } finally {
      println("Xử lý ngoại lệ trong Kotlin")
   }
}

Khi chạy ví dụ trên, chương trình sẽ phát sinh một ngoại lệ tại dòng name.toInt() vì không thể chuyển một chuỗi sang dạng số int được. Với chương trình trên, nếu không xử lý ngoại lệ thì chương trình sẽ phát sinh lỗi và kết thúc bất thường.

3. Kết luận

Khi lập trình, các lập trình viên phải lưu ý sẽ phải đặt những đoạn code có thể phát sinh lỗi thực thi vào trong try…catch nếu không muốn chương trình của mình có thể kết thúc bất thường lúc chạy.

Trong một khối try…catch, chúng ta có thể lòng nhiều catch. Điều này đồng nghĩa với việc, câu lệnh nào phát sinh lỗi trước sẽ vào catch tương ứng.

fun main(args: Array) {
  try {
	 var num: Int
	 var tmp = "Gia Su Tin Hoc" 
	 num = tmp.toInt()
	 var result = num / 0
  } catch (nfe: NumberFormatException) {
	 nfe.printStackTrace()
	 println("Khong phai so")
  } catch (ae: ArithmeticException) {
	 ae.printStackTrace()
	 println("\nKhong chia duoc cho 0")
  }
}

Khi chạy đoạn code trên, chương trình sẽ phát sinh ngoại lệ NumberFormatException vì không thể chuyển một chuỗi “Gia Su Tin Hoc” thành một số

Như các bạn thấy, mặc dù chúng tôi sử dụng 2 ngoại lệ khi viết try…catch. Tuy nhiên khi chạy chương trình thì lệnh name.toInt() phát sinh lỗi nên catch (nfe: NumberFormatException) sẽ được thực hiện.

Cũng đoạn code trên và được sửa lại như bên dưới thì khi chạy chương trình thì ngoại lệ sẽ vào catch (ae: ArithmeticException) vì không thể chia cho số 0.

fun main(args: Array) {
  try {
    var num: Int
    var tmp = "10" 
    num = tmp.toInt()
    var result = num / 0
  } catch (nfe: NumberFormatException) {
    nfe.printStackTrace()
    println("Khong phai so")
  } catch (ae: ArithmeticException) {
    ae.printStackTrace()
    println("\nKhong chia duoc cho 0")
  }
}

Phát sinh ngoại lệ

Hướng dẫn dùng kotlin exceptions trong PHP

Như vậy, thông qua bài học này, mình đã giới thiệu đến các bạn cách xử lý ngoại lệ trong Kotlin. Cảm ơn các bạn đã đọc.

Xin chào tất cả các mọi người, bài viết này mình xin trình bày về xử lý lỗi và Exception trong PHP, rất mong được sự theo dõi của mọi người

1) Xử lý lỗi

Xử lý lỗi là tiến trình phát hiện lỗi được tạo khi chạy code của bạn và sau đó thực hiện các hành động thích hợp. Nếu bạn xử lý lỗi không chính xác, thì có thể dẫn tới nhiều kết quả không mong đợi.

PHP có cung cấp các cơ chế giúp bắt lỗi, giám sát các lỗi và xử lý các lỗi có thể xảy ra khi lập trình.

1.1) Hàm die() và exit()

  • Để bắt lỗi trong PHP ta có thể sử dụng hàm die() hoặc hàm exit().
  • Khi dùng hàm die() hoặc exit() thì một message sẽ được bắn ra và chương trình sẽ bị dừng lại.

   if(!file_exists("/path/to/data-file.txt")) {
       // nếu chương trình chạy vào đây thì code ở phía sau sẽ không được thực thi
       exit("Không tìm thấy file này!!!"); 
   }
   else {
       $file=fopen("/path/to/data-file.txt","r");
       print "Mở file thành công!!!";
   }
   // logic ....
?>

1.2) Tự định nghĩa hàm để xử lý lỗi trong PHP

  • Để tự định nghĩa hàm để xử lý lỗi thì ta có thể sử dụng cú pháp :

    error_function(errno, errstr, errfile, errline, errcontext);

  • Hàm xử lý lỗi tùy chỉnh phải có ít nhất hai tham số (error_level và errstr) bắt buộc, ngoài ra nó có thêm ba tham số (errfile, errline và errcontext) không bắt buộc, như được mô tả dưới đây

    • errno: Xác định mức độ lỗi, dưới dạng một số nguyên. Điều này tương ứng với hằng số cấp độ lỗi phù hợp (E_ERROR, E_WARNING, ...)
    • errstr: Xác định thông báo lỗi dưới dạng chuỗi
    • errfile: Xác định tên file của tập lệnh trong đó xảy ra lỗi
    • errline: Xác định số dòng mà lỗi xảy ra
    • errcontext: Xác định một mảng chứa tất cả các biến và giá trị của chúng tồn tại tại thời điểm xảy ra lỗi. Tham số này rất hữu ích cho việc gỡ lỗi
  • Các cấp độ lỗi trong PHP

Cấp độ lỗiGiá trịMô tả
E_ERROR 1 Một lỗi Runtime nghiêm trọng. Việc thực thi kịch bản được dừng lại ngay lập tức
E_WARNING 2 Các lỗi không nghiêm trọng và việc thực thi script không bị dừng lại
E_NOTICE 8 Một thông báo runtime. Cho biết rằng tập lệnh gặp phải lỗi có thể xảy ra, mặc dù tình huống cũng có thể xảy ra khi chạy tập lệnh bình thường
E_USER_ERROR 256 Một thông báo lỗi do người dùng tạo ra. Điều này giống như một E_ERROR, ngoại trừ nó được tạo bởi tập lệnh PHP bằng cách sử dụng hàm trigger_error () chứ không phải là PHP engine
E_USER_WARNING 512 Một thông điệp cảnh báo không trí mạng do người dùng tạo ra. Điều này giống như một E_WARNING, ngoại trừ nó được tạo bởi tập lệnh PHP bằng cách sử dụng hàm trigger_error () chứ không phải PHP engine
E_USER_NOTICE 1024 Một thông báo thông báo do người dùng tạo. Điều này giống như một E_NOTICE, ngoại trừ nó được tạo bởi tập lệnh PHP bằng cách sử dụng hàm trigger_error () chứ không phải PHP engine
E_STRIC 2048 Không hoàn toàn là một lỗi, nhưng được kích hoạt bất cứ khi nào PHP gặp mã có thể dẫn đến sự cố hoặc chuyển tiếp không tương thích
E_ALL 8189 Tất cả các lỗi và cảnh báo, ngoại trừ E_STRICT trước PHP 5.4.0.

Ví dụ


  function handleError($error_no, $error_msg)
  {
    echo "Opps, something went wrong:";
    echo "Error number: [$error_no]";
    echo "Error Description: [$error_msg]";
  }
  
   //thiết lập error handler
  set_error_handler("handleError");
  
  echo (5 / 0);
?>

Như vậy, chúng ta tùy chỉnh tin nhắn thông báo lỗi cho thân thiện và rõ ràng hơn.

2) Exception

  • Exception là một giải pháp quản lý lỗi kiểu hướng đối tượng

  • Nó là một class được xây dựng sẵn trong ngôn ngữ PHP

  • Một đối tượng Exception sẽ chứa các thông tin về nơi xảy ra lỗi (tên file, số dòng)

  • Một số từ khóa liên quan tới Exception

    • Try : đoạn mã có khả năng xảy ra ngoại lệ nằm trong khối “try”. Nếu không xảy ra ngoại lệ mã sẽ tiếp tục như bình thường. Tuy nhiên nếu xảy ra ngoại lệ thì một ngoại lệ sẽ được ném ra.
    • Throw : Ngoại lệ được kích hoạt. Mỗi “throw” phải bao gồm ít nhất một khối “catch”.
    • Catch : lấy ra một ngoại lệ và tạo ra một đối tượng chứa thông tin ngoại lệ.

Cú pháp

try 
{
    //Khối lệnh mà có thể phát sinh Exception
} 
catch (Exception $e) 
{    
    //Khối lệnh bắt được Exception
}

Ví dụ :


//tạo hàm và throw một ngoại lệ
function checkNum($number) {
  if($number > 1) {
    throw new Exception("Giá trị phải nhỏ hơn hoặc bằng 1.");
  }
  return true;
}
 
//kích hoạt ngoại lệ trong khối "try"
try {
  checkNum(2);
  // nếu ngoại lệ được ném ra thì lệnh sau không được thực thi
  echo 'Number nhỏ hơn hoặc bằng 1.';
} catch(Exception $e) { //catch exception
  echo 'Message: ' .$e->getMessage();
}
?>
  • Hàm checkNum() kiểm tra nếu một số lớn hơn 1. Nếu điều kiện đúng ngoại lệ được ném ra
  • Hàm checkNum() được gọi trong khối “try”
  • Ngoại lệ trong hàm checkNum() được ném ra
  • Khối “catch” lấy ra ngoại lệ và tạo ra một đối tượng ($e) chứa thông tin ngoại lệ
  • Thông báo lỗi từ ngoại lệ được lặp lại bằng cách gọi $ e-> getMessage() từ đối tượng ngoại lệ.

Trong ví dụ trên, hàm $e->getMessage được sử dụng để lấy error message. Dưới đây là một số hàm có thể được sử dụng từ lớp Exception trong PHP.

  • getMessage() : Hiển thị tin nhắn ngoại lệ
  • getCode() : Hiển thị các mã số là đại diện của các loại ngoại lệ.
  • getFile() : Hiển thị tên các tập tin và đường dẫn nơi xảy ra ngoại lệ.
  • getLine() : Hiển thị các dòng xảy ra ngoại lệ.
  • getTrace() : Hiển thị trả về thông tin truy vết lỗi là một mảng các tên file và số dòng
  • getPrevious() : Hiển thị các ngoại lệ trước khi xảy ra trường hợp hiện tại
  • getTraceAsString() : Hiển thị một loạt các dấu vết của ngoại lệ như một chuỗi thay vì một mảng
  • __toString() : Hiển thị toàn bộ ngoại lệ như một chuỗi.

2.1 Tạo một lớp ngoại lệ tùy chỉnh Nếu lớp Exception mặc định chưa đủ dùng cho bạn, bạn có thể tạo ra các Exeption riêng bằng cách kế thừa lớp Exception

  • Chú ý, chỉ có phương thức khởi tạo __contruct()__toString của Exception có thể ghi đè trong lớp kế thừa, còn lại các phương thức khác không thể ghi đè vì nó được định nghĩa là final.

Ví dụ :


class CustomException extends Exception {
  public function errorMessage() {
    //error message
    $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
        .': '.$this->getMessage().' is not a valid E-Mail address';
        
    return $errorMsg;
  }
}
 
$email = "";
 
try {
  //check email hợp lệ
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
    //throw exception nếu email không hợp lệ
    throw new customException($email);
  }
} catch (customException $e) {
  //hiển thị message
  echo $e->errorMessage();
}
?>

2. 2) Xử lý nhiều ngoại lệ

  • Multiple Exceptions sử dụng nhiều block try...catch để cố gắng bắt các ngoại lệ được ném ra.

Ví dụ


class CustomException2 extends Exception {
  public function errorMessage() {
    //error message
    $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
    .': '.$this->getMessage().' is not a valid E-Mail address.';
    return $errorMsg;
  }
}
 
$email = "";
 
try {
  //check if
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
    //throw exception nếu email không hợp lệ
    throw new CustomException2($email);
  }
  //kiểm tra tồn tại chuỗi "example" trong địa chỉ email
  if(strpos($email, "example") !== FALSE) {
    throw new Exception("$email is an example e-mail.");
  }
} catch (CustomException2 $e) {
  echo $e->errorMessage();
} catch(Exception $e) {
  echo $e->getMessage();
}
?>

2.3) Thiết lập Xử lý ngoại lệ toàn cục Khi ứng dụng phát sinh ngoại lệ bằng lệnh throw, nếu ngoại lệ không bị bắt lại bằng khối lệnh try ... catch ... thì ngoại lệ đó sẽ chuyển cho hàm xử lý ngoại lệ mặc định của PHP. Giờ nếu bạn muốn tạo ra hàm mặc định này thì làm như sau: Tạo hàm riêng xử lý ngoại lệ có dạng function my_exception_handler($exception), sau đó dùng hàm set_exception_handler('my_exception_handler') để đăng ký với PHP

Ví dụ


function handleUncaughtException($e){
    // Hiển thị thông báo lỗi chung cho người dùng
    echo "Opps! Có lỗi xảy ra. Hãy thử lại hoặc liên hệ với chúng tôi nếu còn lỗi.";
    
    // Lấy thông tin lỗi
    $error = "Uncaught Exception: " . $message = date("Y-m-d H:i:s - ");
    $error .= $e->getMessage() . " trong file " . $e->getFile() . " ở dòng " . $e->getLine() . "\n";
}
 
// Đăng ký xử lý ngoại lệ tùy chỉnh
set_exception_handler("handleUncaughtException");
 
// Ném ra một ngoại lệ
throw new Exception("Kiểm tra ngoại lệ!");
?>

Kết bài

Như vậy là trong bài này mình đã trình bày về xử lý lỗi và Exception trong PHP cám ơn tất cả mọi người đã theo dõi

Nguồn tham khảo

  • https://www.php.net/
  • https://vietjack.com/
  • https://laptrinhvienphp.com/