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ả.
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;
?>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
1Hàm nâng cao
Hàm ẩn danhClosure và 'use'Hàm mũi tênHàm callbackDùng 'call_user_func'Hàm biếnTruyền tham chiếuHàm đệ quyÔn tập: tổng hợp về hàm4Mảng đa chiều
Tạo mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuChỉnh sửa phần tử trong mảng 2 chiềuLặp qua các vòng lặp lồng nhauMảng kết hợp 2 chiềuÔn tập: bài tập lưới đơn giản2Thao tác nâng cao với mảng
Thêm phần tử bằng 'array_push'Xóa phần tử bằng 'array_pop'Thêm phần tử vào đầu mảng bằng 'array_unshift'Xóa phần tử đầu mảng bằng 'array_shift'Gộp các mảng được đánh chỉ sốGộp các mảng kết hợpTrích xuất phần tử bằng 'array_slice'Kiểm tra giá trị bằng 'in_array'Tìm khóa bằng 'array_search'Ôn tập: bài tập về danh sách phát3Sắp xếp mảng
Sắp xếp mảng có chỉ số tăng dầnSắp xếp mảng có chỉ số giảm dầnSắp xếp mảng kết hợp theo giá trịSắp xếp mảng kết hợp theo khóaSắp xếp theo thứ tự tự nhiênSắp xếp tùy chỉnh bằng 'usort'Ôn tập: Sắp xếp bảng xếp hạngTự luyện tập: Trình biên dịch PHP online