Lỗi “Call to a member function on null” Là Gì? Nguyên Nhân & Cách Sửa

Call to a member function on null

Bạn đang làm việc với PHP hoặc WordPress thì đột nhiên trang web hiển thị thông báo lỗi đỏ chói: “Fatal error: Call to a member function on null” — và không biết bắt đầu xử lý từ đâu?

Đừng lo, đây là một trong những lỗi PHP phổ biến nhất mà hầu hết lập trình viên đều từng gặp ít nhất một lần. Lỗi này không khó sửa, nhưng nếu không hiểu đúng nguyên nhân thì bạn sẽ mãi loay hoay mà không tìm ra hướng giải quyết.

Trong bài viết này, WEB24H sẽ giải thích rõ lỗi Call to a member function on null là gì, tại sao nó xảy ra và hướng dẫn từng bước cách sửa nhanh nhất — kể cả khi bạn không phải lập trình viên chuyên nghiệp.

Lỗi “Call to a member function on null” là gì?

Lỗi Call to a member function on null là một trong những lỗi PHP phổ biến nhất mà lập trình viên hay gặp phải, đặc biệt khi làm việc với WordPress, Laravel hoặc các framework PHP khác.

Lỗi \
Lỗi \”Call to a member function on null\” là gì?

Thông báo lỗi đầy đủ thường xuất hiện như sau:

Fatal error: Call to a member function ten_ham() on null in /đường/dẫn/file.php on line X

Hiểu đơn giản: bạn đang cố gọi một hàm (method) của một đối tượng (object), nhưng đối tượng đó lại đang có giá trị null — tức là chưa được khởi tạo hoặc không tồn tại. Giống như bạn muốn gọi điện cho ai đó nhưng số điện thoại trong tay lại là tờ giấy trắng.

Nguyên Nhân Phổ Biến

Có nhiều nguyên nhân dẫn đến lỗi này, dưới đây là những trường hợp thường gặp nhất:

1. Truy vấn database không trả về kết quả Đây là nguyên nhân số 1. Khi bạn dùng get_post(), get_user_by(), find() hay bất kỳ hàm truy vấn nào mà không có kết quả, giá trị trả về sẽ là null. Nếu bạn tiếp tục gọi method trên giá trị null đó, lỗi ngay lập tức xuất hiện.

2. Biến chưa được khởi tạo Bạn khai báo một biến nhưng chưa gán giá trị cho nó, sau đó lại cố gọi method. PHP không tự động tạo object cho bạn.

3. Sai tên hàm hoặc sai class Gõ nhầm tên hàm, sai namespace hoặc quên use class ở đầu file cũng dẫn đến object trả về null.

4. Thứ tự khởi tạo không đúng Trong WordPress, nếu bạn gọi các hàm quá sớm trước khi WordPress load xong (ví dụ dùng sai hook), đối tượng toàn cục chưa được khởi tạo.

5. Lỗi logic trong code Một điều kiện if/else bị sai khiến biến không được gán giá trị trong một số trường hợp nhất định.

Cách Xác Định Vị Trí Lỗi

Trước khi sửa, bạn cần biết lỗi đang xảy ra ở đâu. Thông báo lỗi PHP sẽ chỉ rõ tên filesố dòng xảy ra lỗi, ví dụ:

Fatal error: Call to a member function get_name() on null in /var/www/html/wp-content/themes/mytheme/functions.php on line 45

Mở file functions.php, tìm đến dòng 45, đó chính là nơi bạn cần kiểm tra. Nhìn vào biến đang được gọi method — biến đó đang bị null.

Nếu trang web trắng hoàn toàn (White Screen of Death) và bạn không thấy thông báo lỗi, hãy bật chế độ debug bằng cách thêm vào file wp-config.php:

define(‘WP_DEBUG’, true); define(‘WP_DEBUG_LOG’, true);

Sau đó xem lại file wp-content/debug.log để tìm thông báo lỗi chi tiết.

Cách Sửa Lỗi Call to a member function on null

Cách 1: Kiểm tra null trước khi gọi method

Cách 1: Kiểm tra null trước khi gọi method
Cách 1: Kiểm tra null trước khi gọi method

Đây là cách đơn giản và hiệu quả nhất. Trước khi gọi bất kỳ method nào, hãy kiểm tra xem biến có đang là null không. Trong PHP bạn dùng if ($object !== null) hoặc cách ngắn gọn hơn là if ($object) trước khi gọi $object->ten_ham().

Cách 2: Dùng toán tử Null Safe (?->)

Từ PHP 8.0 trở lên, bạn có thể dùng toán tử ?-> thay cho ->. Nếu biến đang là null, PHP sẽ tự động bỏ qua và trả về null thay vì báo lỗi. Đây là cách viết code hiện đại và an toàn hơn rất nhiều.

Cách 3: Kiểm tra kết quả truy vấn database

Khi dùng WP_Query hoặc bất kỳ hàm truy vấn nào trong WordPress, luôn kiểm tra have_posts() trước khi dùng the_post() hay gọi bất kỳ method nào trên kết quả trả về. Đừng bao giờ giả định rằng truy vấn luôn có kết quả.

Cách 4: Khởi tạo biến trước khi dùng

Nếu bạn khai báo một biến ở đầu function nhưng chỉ gán giá trị trong một nhánh if, hãy đảm bảo biến đó có giá trị mặc định. Đặt $bien = null hoặc một giá trị mặc định phù hợp để tránh tình trạng biến không xác định.

Cách 5: Kiểm tra lại hook trong WordPress

Nếu bạn đang dùng WordPress và lỗi xảy ra khi gọi các hàm toàn cục như $wpdb, $wp_query hay $current_user, hãy đảm bảo code của bạn chạy trong hook phù hợp. Dùng init, wp_loaded hoặc template_redirect thay vì chạy thẳng ngoài hook.

Ví Dụ Thực Tế Trong WordPress

Tình huống hay gặp nhất là khi lấy thông tin bài viết theo ID. Nếu bài viết không tồn tại hoặc đã bị xóa, hàm get_post($id) sẽ trả về null. Lúc này nếu bạn gọi ->post_title trực tiếp sẽ gặp lỗi ngay. Giải pháp là luôn kiểm tra if ($post) trước khi sử dụng.

Tương tự với người dùng — hàm get_user_by() cũng trả về false nếu không tìm thấy user. Bạn cần kiểm tra if ($user && !is_wp_error($user)) trước khi truy cập các thuộc tính của đối tượng user.

Cách Phòng Tránh Lỗi Này

Để không bao giờ gặp lại lỗi này, hãy ghi nhớ các nguyên tắc sau khi viết code PHP:

Luôn kiểm tra giá trị trả về của hàm truy vấn trước khi dùng. Không bao giờ giả định rằng database luôn có dữ liệu. Sử dụng toán tử ?-> nếu bạn đang dùng PHP 8.0+. Bật WP_DEBUG trong môi trường development để phát hiện lỗi sớm. Viết unit test cho các hàm quan trọng để kiểm tra cả trường hợp trả về null.

Tổng Kết

Lỗi Call to a member function on null tuy trông đáng sợ nhưng thực ra rất dễ sửa một khi bạn hiểu nguyên nhân. Nguyên tắc vàng là: luôn kiểm tra null trước khi gọi method. Thói quen này không chỉ giúp bạn tránh lỗi mà còn giúp code trở nên chắc chắn và chuyên nghiệp hơn.

Nếu bạn vẫn chưa tìm ra nguyên nhân sau khi đã thử các cách trên, hãy để lại bình luận bên dưới hoặc đặt câu hỏi tại web24h.vn — cộng đồng sẽ hỗ trợ bạn!

5 1 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x