Menu
CoddyTech

Truyền tham chiếu

Thuộc phần Logic và luồng chương trình trong hành trình PHP của Coddy. Bài học 7 trên 68.

Theo mặc định, khi bạn truyền một biến (variable) cho một hàm (function) trong PHP, hàm sẽ nhận bản sao giá trị của biến đó. Điều này có nghĩa là mọi thay đổi bên trong hàm không ảnh hưởng đến biến ban đầu bên ngoài hàm.

Tuy nhiên, đôi khi bạn muốn hàm (function) sửa trực tiếp biến ban đầu. Lúc này, bạn có thể truyền tham chiếu. Khi thêm dấu và (&) trước tên tham số trong phần định nghĩa hàm, bạn yêu cầu PHP truyền biến thực tế thay vì một bản sao:

<?php
function doubleValue(&$number) {
    $number = $number * 2;
}

$value = 10;
doubleValue($value);
echo $value;  // In ra: 20
?>

Hãy chú ý cách $value thay đổi từ 10 thành 20 dù chúng ta không trả về gì từ hàm. Tham số &$number tạo liên kết trực tiếp đến biến $value ban đầu, cho phép hàm sửa đổi biến đó trực tiếp.

Kỹ thuật này đặc biệt hữu ích khi bạn cần một hàm (function) sửa đổi nhiều biến hoặc khi làm việc với các cấu trúc dữ liệu lớn mà việc sao chép sẽ kém hiệu quả.

challenge icon

Thử thách

Dễ

Tạo một hàm có tên updateInventory nhận ba tham số: tham chiếu đến một biến số lượng, lượng cần thêm và lượng cần bớt. Hàm cần thay đổi số lượng ban đầu bằng cách cộng lượng đầu tiên rồi trừ lượng thứ hai.

Bạn sẽ nhận ba đầu vào: số lượng ban đầu, lượng cần thêm và lượng cần bớt. Đọc cả ba đầu vào, tạo một biến với số lượng ban đầu, gọi hàm updateInventory và truyền số lượng theo tham chiếu cùng với lượng cần thêm và lượng cần bớt, sau đó in ra số lượng đã cập nhật.

Định dạng đầu vào: Ba dòng: dòng đầu tiên chứa số lượng ban đầu (một số), dòng thứ hai chứa lượng cần thêm (một số), dòng thứ ba chứa lượng cần bớt (một số)

Đầu ra mong đợi: Số lượng đã cập nhật sau khi thêm và bớt

Tự làm thử

<?php
// Đọc các giá trị đầu vào
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));

// Tạo biến quantity
$quantity = $initialQuantity;

// TODO: Tạo hàm updateInventory tại đây với tham số truyền bằng tham chiếu

// TODO: Gọi hàm updateInventory và truyền quantity bằng tham chiếu

// In ra quantity sau khi cập nhật
echo $quantity;
?>
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 Logic và luồng chương trình

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