PHP - Gọi theo giá trị: Hướng dẫn thân thiện cho người mới bắt đầu
Xin chào các siêu sao PHP tương lai! Tôi rất vui mừng được làm hướng dẫn viên của bạn trong hành trình đầy thú vị vào thế giới lập trình PHP. Hôm nay, chúng ta sẽ cùng tìm hiểu một khái niệm cơ bản gọi là "Gọi theo giá trị". Đừng lo lắng nếu nó听起来 có vẻ đáng sợ - tôi承诺 sẽ chia nhỏ nó thành những phần dễ nuốt!
Gọi theo giá trị là gì?
Trước khi chúng ta nhảy vào mã, hãy hiểu xem "Gọi theo giá trị" nghĩa là gì. Hãy tưởng tượng bạn có một phiếu công thức với các hướng dẫn. Khi bạn chia sẻ công thức này với bạn bè, bạn không cho họ phiếu gốc của bạn - bạn làm một bản sao. Bằng cách này, nếu họ không may đổ nước sốt lên nó hoặc thay đổi nó, công thức gốc của bạn vẫn an toàn. Đó chính là điều "Gọi theo giá trị" làm trong lập trình!
Trong PHP, khi bạn truyền một biến vào một hàm bằng cách "Gọi theo giá trị", hàm nhận được một bản sao của giá trị biến, không phải biến gốc itself. Điều này có nghĩa là bất kỳ thay đổi nào được thực hiện đối với biến trong hàm không ảnh hưởng đến biến gốc ngoài hàm.
Bây giờ, hãy cùng xem điều này trong hành động với một số ví dụ!
Ví dụ 1: Bánh sinh nhật
Hãy bắt đầu với một ví dụ đơn giản. Hãy tưởng tượng chúng ta đang nướng một chiếc bánh sinh nhật và chúng ta muốn thêm nến:
function addCandles($age) {
$age = $age + 1;
echo "Inside the function: $age candles\n";
}
$myAge = 25;
echo "Before the function: $myAge years old\n";
addCandles($myAge);
echo "After the function: $myAge years old\n";
Nếu bạn chạy đoạn mã này, đây là những gì bạn sẽ thấy:
Before the function: 25 years old
Inside the function: 26 candles
After the function: 25 years old
Điều gì đã xảy ra ở đây? Hãy phân tích:
- Chúng ta bắt đầu với
$myAge
được đặt là 25. - Chúng ta gọi hàm
addCandles
, truyền$myAge
. - Trong hàm, chúng ta thêm 1 vào
$age
(đây là một bản sao của$myAge
). - Hàm in ra 26 nến.
- Ngoài hàm,
$myAge
vẫn là 25!
Đây là "Gọi theo giá trị" trong hành động. Hàm đã làm việc với một bản sao của $myAge
, vì vậy biến gốc vẫn không thay đổi.
Ví dụ 2: Danh sách mua sắm
Hãy thử một ví dụ khác. Lần này, chúng ta sẽ làm việc với một danh sách mua sắm:
function addItem($list, $item) {
$list[] = $item;
echo "Inside function: " . implode(", ", $list) . "\n";
}
$myList = ["apples", "bananas"];
echo "Before function: " . implode(", ", $myList) . "\n";
addItem($myList, "oranges");
echo "After function: " . implode(", ", $myList) . "\n";
Chạy đoạn mã này sẽ cho bạn:
Before function: apples, bananas
Inside function: apples, bananas, oranges
After function: apples, bananas
Điều gì đang xảy ra ở đây?
- Chúng ta bắt đầu với một danh sách mua sắm chứa táo và chuối.
- Chúng ta gọi
addItem
, truyền danh sách của chúng ta và "oranges". - Trong hàm, "oranges" được thêm vào bản sao của danh sách.
- Hàm hiển thị danh sách đã cập nhật với oranges.
- Ngoài hàm, danh sách gốc của chúng ta vẫn không thay đổi!
Lại một lần nữa, "Gọi theo giá trị" đảm bảo rằng danh sách mua sắm gốc của chúng ta không bị thay đổi.
Ví dụ 3: Nhân đôi số
Hãy xem một ví dụ cuối cùng để really cố định khái niệm này:
function doubleNumber($num) {
$num *= 2;
echo "Inside function: $num\n";
return $num;
}
$myNumber = 5;
echo "Before function: $myNumber\n";
$result = doubleNumber($myNumber);
echo "Function returned: $result\n";
echo "After function: $myNumber\n";
Điều này sẽ đầu ra:
Before function: 5
Inside function: 10
Function returned: 10
After function: 5
Hãy phân tích điều này:
- Chúng ta bắt đầu với
$myNumber
là 5. - Chúng ta gọi
doubleNumber
, truyền$myNumber
. - Trong hàm, bản sao của số được nhân đôi thành 10.
- Hàm trả về giá trị đã nhân đôi.
- Ngoài hàm,
$myNumber
vẫn là 5, nhưng chúng ta có kết quả đã nhân đôi trong$result
.
Ví dụ này cho thấy rằng ngay cả khi một hàm trả về một giá trị, biến gốc truyền vào vẫn không bị ảnh hưởng do "Gọi theo giá trị."
Tại sao "Gọi theo giá trị" lại quan trọng?
Bạn có thể tự hỏi, "Tại sao chúng ta cần điều này?" "Gọi theo giá trị" rất quan trọng để duy trì tính toàn vẹn dữ liệu trong các chương trình của bạn. Nó ngăn không cho các hàm vô tình thay đổi các biến mà chúng không nên, điều này có thể dẫn đến các lỗi không mong muốn và các vấn đề khó theo dõi.
Hãy tưởng tượng nếu mỗi lần bạn cho một người bạn mượn một cuốn sách, họ có thể vô tình (hoặc cố ý) thay đổi cốt truyện! Đó sẽ là hỗn loạn! "Gọi theo giá trị" giống như việc bạn cho họ một bản photo - họ có thể viết tất cả các ghi chú họ muốn, nhưng cuốn sách gốc của bạn vẫn nguyên vẹn.
Bảng tham khảo nhanh
Dưới đây là bảng tóm tắt những gì chúng ta đã học về "Gọi theo giá trị" trong PHP:
Mặt hàng | Mô tả |
---|---|
Định nghĩa | Hàm nhận một bản sao của giá trị biến |
Biến gốc | Không thay đổi sau khi gọi hàm |
Tham số hàm | Có thể thay đổi trong hàm mà không ảnh hưởng đến biến gốc |
Trường hợp sử dụng | Duy trì tính toàn vẹn dữ liệu, ngăn chặn các hiệu ứng phụ không mong muốn |
Bộ nhớ | Tạo một bản sao mới, có thể sử dụng nhiều bộ nhớ hơn cho các cấu trúc dữ liệu lớn |
Kết luận
Chúc mừng! Bạn đã刚刚 bước đầu hiểu về "Gọi theo giá trị" trong PHP. Nhớ rằng khái niệm này giống như việc tạo một bản photo của biến trước khi truyền nó cho một hàm. Hàm có thể vẽ vời lên bản photo, nhưng biến gốc của bạn vẫn an toàn và nguyên vẹn.
Khi bạn tiếp tục hành trình PHP của mình, bạn sẽ gặp nhiều tình huống phức tạp hơn và thậm chí học về đối tác của nó, "Gọi theo tham chiếu". Nhưng hiện tại, hãy tự động viên bản thân - bạn đã lĩnh hội một khái niệm cơ bản sẽ phục vụ bạn tốt trong các cuộc phiêu lưu lập trình của mình!
Tiếp tục mã hóa, giữ sự tò mò, và nhớ - trong thế giới PHP, các biến của bạn giống như những công thức quý giá của bạn. "Gọi theo giá trị" đảm bảo rằng chúng không bị thêm bất kỳ thành phần không mong muốn nào!
Credits: Image by storyset