Đã bao giờ bạn cùng bạn bè đang ngồi vui vẻ cà phê, bỗng nhiên một người tới, "tỉnh bơ" ngồi chung bàn...Bạn nhìn Tuấn, Tuấn nhìn Hùng, Hùng nhìn Loan, Loan nhìn Hằng...Không ai biết người đó cả...
Đôi khi bạn cũng "bắt" PHP phải nhìn ngó, kiểu: "Gì dzậy trời!"...Bạn viết code rất tự tin:
<?php
echo $name;
?>Refresh trang.
PHP trả lời:
Warning:
Undefined variable $name
PHP kiểu:
"Ủa, anh gọi người tên $name…
nhưng em chưa từng gặp người này "
Undefined Variable là gì?
Undefined Variable trong PHP là lỗi/warning xảy ra khi bạn sử dụng một biến chưa được tạo hoặc chưa có giá trị.
Ví dụ:
echo $age;
Trong khi:
$age
chưa tồn tại.
PHP cảnh báo.
Đây có phải Fatal Error không?
Không phải.
Undefined Variable thường là:
Warning
hoặc:
Notice
Website thường vẫn chạy tiếp.
Ví dụ thực tế
Bạn đi nhận hàng.
Nhân viên giao nhận hỏi:
"Tên anh là gì?"
Bạn trả lời:
"Tên tôi là…"
(im lặng 5 phút)
"Tên" là một từ vô nghĩa, chưa có trong từ điển.
Ủa, vậy là sao...lú hết cả người! PHP cũng hoang mang, bần thần, ngơ ngác y chang vậy.
Ví dụ cơ bản nhất
<?php
echo $username;
?>Chưa khai báo:
$username
Warning!!
Cách sửa
<?php
$username = "Dat";
echo $username;
?>Hòa bình lập lại, website lại "bon bon chạy"
8 nguyên nhân Undefined Variable phổ biến nhất
1. Quên tạo biến
Đây là lỗi quốc dân, "nhẵn mặt" với hầu hết chúng ta
<?php
$total = $price * $quantity;
?>Nhưng quên tạo:
$price
hoặc quên:
$quantity
2. Sai tên biến
<?php
$name = "Dat";
echo $Name;
?>PHP phân biệt:
$name
$Name
Ví dụ thực tế
Bạn lưu trong contact:
Tuấn
Nhưng lại tìm:
tuấn
Không thấy
3. Biến nằm ngoài scope
Lỗi rất "quen mặt" với newbie
<?php
function hello(){
$name = "Dat";
}
echo $name;
?>$name chỉ tồn tại bên trong function. Bên trong thì...chạy ngon lành cành đào!
Ra ngoài là "bay màu" , chẳng ai biết "anh ấy"
Scope là gì?
Scope = phạm vi tồn tại của biến.
Giống như:
WiFi nhà hàng xóm.
Đứng trong nhà họ:
có mạng
Đi ra xa:
mất "mạng"
4. Form chưa submit
<?php
echo $_POST['username'];
?>Nhưng user chưa submit form.
Undefined array key / variable
Cách sửa
<?php
if(isset($_POST['username'])){
echo $_POST['username'];
}
?>5. include thiếu file
<?php
include "config.php";
echo $db_host;
?>Nhưng:
config.php
không tồn tại
$db_host chưa được tạo.
6. if không chạy
<?php
if($age > 18){
$message = "OK";
}
echo $message;
?>Nếu:
$age <= 18
$message không tồn tại
Cách sửa
<?php
$message = "";
if($age > 18){
$message = "OK";
}
echo $message;
?>7. foreach rỗng
<?php
foreach($users as $user){
}
echo $user;
?>Trường hợp xấu, nếu:
biến $users -->rỗng
$user chưa từng được tạo.
8. Lỗi đánh máy
Lỗi "ngu người" nhưng gặp suốt
<?php
$username = "Dat";
echo $usernmae;
?>Chỉ đảo 2 ký tự
Undefined Variable có nguy hiểm không?
Dĩ nhiên là có về lâu dài.
Ban đầu chỉ là warning.
Nhưng về lâu dài:
- dữ liệu sai
- logic sai
- bug khó debug
- output rác
Ví dụ "đau lòng, đau túi"
Website tính tiền:
$total = $price + $ship;
Nhưng:
$ship
undefined
PHP tự convert thành:
0
Bạn lại lầm tưởng:
"Website chạy ngon lành."
Cách debug kiểu dev "xịn sò"
1. Đọc tên biến thật kỹ
- $username
- $userName
- $user_name
Là 3 biến khác nhau
2. Dùng isset()
Rất quan trọng
<?php
if(isset($username)){
echo $username;
}
?>isset hoạt động thế nào?
isset() kiểm tra:
"Biến này có tồn tại không?"
Nếu có:
true
Nếu chưa tồn tại:
false
3. Khởi tạo biến mặc định
Rất nên làm
$message = "";
$total = 0;
$users = [];Giúp cho việc giảm bug rất mạnh.
4. Dùng VSCode
VSCode + extension PHP thường cảnh báo sớm
5. Bật error reporting
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>Người mới "nhập môn" nên bật khi học
Sự thật...biết rồi, khổ lắm, nói mãi
Lính mới thường nghĩ:
"Warning thôi mà, không sao."
Nhưng programmer có kinh nghiệm thường:
fix sạch warning
Vì warning hôm nay…
có thể thành bug production ngày mai
Undefined Variable vs Undefined Function
Lỗi Nghĩa
Undefined Variable Biến chưa tồn tại
Undefined Function Function chưa tồn tại
- Một cái thiếu "hộp dữ liệu".
- Một cái thiếu "máy xử lý".
Checklist "chuẩn không cần chỉnh"
Khi gặp lỗi:
- Kiểm tra tên biến.
- Kiểm tra typo.
- Kiểm tra scope.
- Kiểm tra if/foreach.
- Kiểm tra include.
- Dùng isset().
- Khởi tạo giá trị mặc định.
Sau đó, 90% sẽ tìm ra cách sửa lỗi.
Tổng kết
Undefined Variable xảy ra khi bạn dùng một biến chưa tồn tại.
Nguyên nhân phổ biến:
- quên khai báo
- typo
- scope
- form chưa submit
- if không chạy
- include lỗi
Đây là lỗi "nhẵn mặt" với newbie PHP.
Và thật ra…
Lão làng trong nghề cũng gặp hoài
FAQ nhanh
Undefined Variable có làm website sập không?
Thường thì không. Chỉ warning/notice.
Có nên bỏ qua warning?
Không nên. Warning nhỏ hôm nay có thể thành bug lớn mai sau.
isset() có quan trọng không?
Rất quan trọng. Đặc biệt khi làm:
- form
- session
- $_POST
- $_GET
Vì sao localhost không báo mà host lại báo?
Do mức error_reporting khác nhau
Bạn có thể cũng đang gặp: