Phạm vi biến
Thuộc phần Kiến thức cơ bản trong hành trình PHP của Coddy. Bài học 67 trên 71.
Các biến được tạo bên trong một hàm hoàn toàn tách biệt với các biến bên ngoài hàm đó. Khái niệm này gọi là phạm vi biến (variable scope), hiểu rõ khái niệm này sẽ giúp bạn tránh những bug khó hiểu trong code.
Biến được định nghĩa bên trong một hàm chỉ tồn tại trong hàm đó. Biến này được gọi là biến cục bộ:
<?php
function sayHi() {
$message = "Hello!";
echo $message;
}
sayHi();
echo $message; // Lỗi: $message không tồn tại ở đây
?>Biến $message được tạo bên trong sayHi() và biến mất khi hàm kết thúc. Truy cập biến này từ bên ngoài sẽ gây ra lỗi.
Tương tự, các biến được định nghĩa bên ngoài một hàm không tự động khả dụng bên trong hàm đó:
<?php
$name = "Alice";
function greet() {
echo $name; // Lỗi: $name chưa được định nghĩa trong hàm (function) này
}
greet();
?>Mặc dù $name tồn tại trong code chính, hàm không thể nhìn thấy nó. Để dùng các giá trị bên ngoài trong hàm, hãy truyền chúng làm tham số (parameter). Đây là cách rõ ràng và được khuyến nghị mà bạn đã học.
Việc tách biệt này thực sự hữu ích. Nhờ đó, các hàm (function) sẽ không vô tình thay đổi biến ở những phần khác trong chương trình, giúp code của bạn dễ dự đoán và gỡ lỗi hơn.
Thử thách
DễĐọc hai dòng đầu vào:
- Tên một người, ví dụ:
Alice - Một khoản tiền thưởng là số nguyên, ví dụ:
50
Tạo một hàm (function) có tên calculateBonus, nhận hai tham số: $name (chuỗi) và $bonus (số nguyên).
Bên trong hàm:
- Tạo biến cục bộ
$baseSalaryvà đặt giá trị của biến là1000 - Tính tổng tiền lương bằng cách cộng
$baseSalaryvà$bonus - Trả về một chuỗi theo định dạng:
[name] earns [total]
Gọi hàm với các giá trị đầu vào và in ra kết quả trả về.
Ví dụ 1:
Nếu đầu vào là Alice và 50, đầu ra sẽ là:
Alice earns 1050Ví dụ 2:
Nếu đầu vào là Bob và 200, đầu ra sẽ là:
Bob earns 1200Ví dụ 3:
Nếu đầu vào là Emma và 0, đầu ra sẽ là:
Emma earns 1000Tự làm thử
<?php
// Đọc đầu vào
$name = trim(fgets(STDIN));
$bonus = intval(fgets(STDIN));
// TODO: Tạo hàm (function) calculateBonus bên dưới
// Hàm nhận $name (string) và $bonus (int) làm tham số
// Tạo biến cục bộ $baseSalary và gán giá trị 1000
// Tính tổng tiền trả và trả về "[name] earns [total]"
// Gọi hàm và in ra kết quả
echo calculateBonus($name, $bonus);
?>Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức cơ bản
4Toán tử so sánh và logic
Toán tử so sánhBằng nhau và đồng nhấtToán tử logic phần 1Toán tử logic phần 2Ôn tập: logic đơn giản2Biến và kiểu dữ liệu
SốChuỗi và dấu ngoặc képGiá trị BooleanQuy ước đặt tênÔn tập: khởi tạo biếnBiến rỗngNối chuỗiNhận đầu vào từ người dùngChuyển đổi sang kiểu dữ liệu khác5Logic điều kiện
Câu lệnh ifIf và elseToán tử ba ngôiToán tử kết hợp nullCâu lệnh switchÔn tập: đưa ra quyết định3Các toán tử cơ bản
Toán tử số họcToán tử chia lấy dưToán tử lũy thừaPhép gán kết hợpTăng/giảmThứ tự ưu tiên của toán tửÔn tập: phép tính đơn giảnToán tử chuỗiTự luyện tập: Trình biên dịch PHP online