Chúng ta đang ngày càng viết code gọn gàng và chuyên nghiệp hơn. Nếu ở những bài trước bạn đã làm quen với việc chia file, định nghĩa hằng số, thì ở bài này, mình sẽ đưa bạn đến một khái niệm không thể thiếu trong bất kỳ dự án nào – đó là viết hàm dùng chung và xử lý lỗi có tổ chức.
Cứ tưởng tượng bạn đang viết một ứng dụng và phải kiểm tra nhiều lần xem người dùng đã đăng nhập chưa, hoặc kiểm tra dữ liệu đầu vào có hợp lệ không. Nếu mỗi lần đều viết lại y chang đoạn mã đó thì chẳng mấy chốc, mã của bạn sẽ trở nên dài ngoằng và cực kỳ khó bảo trì. Đây là lúc chúng ta cần đến các hàm dùng chung để tái sử dụng và giữ mọi thứ gọn gàng.
Tạo thư mục includes/ và viết hàm dùng chung
Chúng ta sẽ tạo một thư mục gọi là includes/, và trong đó là file functions.php. File này sẽ chứa các hàm mà nhiều trang trong website có thể dùng chung.
Ví dụ, tạo file:
/includes/functions.php
Trong đó:
<?php
function is_logged_in() {
return isset($_SESSION['user']);
}
function redirect($url) {
header("Location: $url");
exit;
}
function old($field) {
return $_POST[$field] ?? '';
}
function escape($string) {
return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
Những hàm này cực kỳ hữu ích:
is_logged_in()kiểm tra xem người dùng đã đăng nhập chưa.redirect()giúp bạn chuyển hướng dễ dàng, không phải gõ đi gõ lạiheader(...).old()giúp giữ lại dữ liệu cũ khi form bị lỗi.escape()bảo vệ trang khỏi lỗi XSS bằng cách lọc dữ liệu khi hiển thị.
Tích hợp vào dự án
Ở mỗi trang bạn muốn dùng các hàm này, chỉ cần include:
require_once 'includes/functions.php';
Vậy là bạn có thể dùng thoải mái các hàm tiện ích như redirect() hay old('email') rồi.
Quản lý lỗi – một cách có tổ chức
Chúng ta sẽ dùng một biến toàn cục để lưu lỗi. Ví dụ, khi validate form:
$errors = [];
if (empty($_POST['email'])) {
$errors['email'] = 'Vui lòng nhập email';
}
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errors['email'] = 'Email không hợp lệ';
}
Sau đó ở trang hiển thị form:
<?php if (!empty($errors['email'])): ?>
<p class="text-red"><?= $errors['email'] ?></p>
<?php endif; ?>
Bạn cũng có thể viết hàm has_error($field) và get_error($field) để dùng cho gọn:
function has_error($field) {
global $errors;
return isset($errors[$field]);
}
function get_error($field) {
global $errors;
return $errors[$field] ?? '';
}
Kết luận
Việc viết hàm dùng chung và chuẩn hóa cách xử lý lỗi giúp dự án của bạn trở nên có tổ chức, dễ bảo trì, và ít lỗi vặt. Đừng tiếc công chia nhỏ mọi thứ – đó là tư duy của một lập trình viên trưởng thành.
Ở bài tiếp theo, bạn sẽ được trải nghiệm một kỹ thuật giúp người dùng cảm nhận hệ thống của bạn “nói chuyện” với họ – đó là Flash message.

Thảo luận