Lencongan Segera dalam PHP

Lencongan yang dilakukan menggunakan fungsi header tidak berlaku pada masa fungsi itu dipanggil. Ini kerana PHP sendiri tidak melaksanakan lencongan, ia hanya menghantar pengepala HTTP yang sesuai ke pelayar.

Ini bermakna lencongan hanya akan berlaku apabila PHP telah melaksanakan keseluruhan skrip sehingga habis. Disebabkan ini, pelbagai kesan sampingan yang tidak diingini boleh berlaku.

Sebagai contoh, dalam kod berikut kita mahu melaksanakan sama ada lencongan, atau permintaan ke pangkalan data. Tetapi permintaan ke pangkalan data akan tetap dilaksanakan walaupun ada arahan untuk lencongan:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query); // akan dilaksanakan walaupun dengan lencongan!
?>

Untuk mengelakkan masalah seperti ini, kita perlu selepas lencongan memanggil fungsi die, yang akan serta-merta menamatkan pelaksanaan skrip dan lencongan akan berlaku segera:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
    die();
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query);
?>
Задание 1

Hasilkan semula sebarang kesan sampingan dalam kod anda. Kemudian betulkannya dengan menggunakan fungsi die.