Menu
CoddyTech

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.

challenge icon

Thử thách

Dễ

Đọc hai dòng đầu vào:

  1. Tên một người, ví dụ: Alice
  2. 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ộ $baseSalary và đặt giá trị của biến là 1000
  • Tính tổng tiền lương bằng cách cộng $baseSalary và $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 1050

Ví dụ 2:

Nếu đầu vào là Bob và 200, đầu ra sẽ là:

Bob earns 1200

Ví dụ 3:

Nếu đầu vào là Emma và 0, đầu ra sẽ là:

Emma earns 1000

Tự 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);
?>
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch PHP online