BẠN ĐÃ NGHE VỀ BITCOIN VÀ MUỐN TÌM HIỂU CHÍNH THỐNG?

HƯỚNG DẪN TOÀN TẬP ĐẦU TƯ VỚI THỊ TRƯỜNG BITCOIN 2021

>> Xem tại đây <<

tham chiếu trong php

Tham chiếu trong PHP, bạn đã hiểu rõ về nó ?

1. Tham chiếu trong PHP là gì ?

References in PHP are a means to access the same variable content by different names.

Trích từ định nghĩa từ http://php.net/, ta có thể hiểu nôm na rằng tham chiếu trong PHP nghĩa là truy cập vào cũng một nội dung nhưng khác tên. Có thể định nghĩa trên bạn đọc vẫn còn hơi khó hiểu? Mình sẽ đưa ra một cách nói khác, hi vọng bạn sẽ dễ hiểu hơn.

Tham chiếu trong PHP có nghĩa là có nghĩa là 1 biến chiếu đến vùng nhớ của 1 biến khác. 2 biến này dùng chung 1 vùng nhớ chứa giá trị nên khi dùng phép gán cho biến này thì giá trị của biến kia cũng thay đổi . Tham chiếu trong PHP có ký hiệu là dấu &

Bạn vẫn còn mơ hồ? Không sao, mình sẽ đưa ra ví dụ sau đây:

Giả sử mình tạo 1 file tên là kungfuphp.txt, trong file này ta điền nội dung đại loại là “kungfuphp xin chào các bạn”, sau đó ta tạo ra 2 shortcut (lối tắt) của file kungfuphp.txt này và đặt ở 2 vị trí khác nhau, chẳng hạn file shortcut 1 mình đặt ở desktop, file còn lại đặt ở thư mục document. Bạn thấy đấy, khi double click lên 2 file này, dù là ở 2 vị trí khác nhau nhưng nó đều cùng trỏ về 1 file là kungfuphp.txt với cùng 1 nội dung là “kungfuphp xin chào các bạn”, nhưng khi mình thay đổi nội dung file kungfuphp.txt thành “hello các bạn”, thì 2 shortcut đã tạo kia cũng trỏ đến nội dung đã thay đổi là “hello các bạn”.

2. Các ví dụ về tham chiếu trong PHP

Ví dụ 1 : Đoạn code sau :

<?php
  $a = 5;
  $b = $a;
  $b = 10;
  var_dump($a);
  var_dump($b);
?>

nghiễm nhiên sẽ cho kết quả là :

5
10

Nhưng khi mình thay đổi lại đoạn code trên 1 chút

<?php
  $a = 5;
  $b = &$a;
  $b = 10;
  var_dump($a);
  var_dump($b);
?>

kết quả sẽ cho ra như sau.

10
10

Đến đây, bạn đã phần nào mường tượng được trong đầu mình về khái niệm tham chiếu rồi chứ ? Ở đây ta thấy rằng, khi dùng phép gán $b = &$a, ta đã cho phép biến $b trỏ tới vùng nhớ của biến $a. Nên khi biến $b thay đổi giá trị thì biến $a  cũng thay đổi giá trị (dành 1 phút liên tưởng lại ví dụ file kungfuphp.txt ở trên bạn nhé )

Ví dụ 2 : Cho đoạn code sau :

<?php
function count(&$var)
{
    $var++;
}

$a=5;
count($a);
echo $a;
// kết quả sẽ là 6
?>

Bạn thấy đó, kết quả của phép toán trên là 6, thông thường nếu không truyền tham chiếu thì kết quả phép toán trên, khi echo biến $a, nó vẫn giữ nguyên giá trị là 5. Nhưng khi truyền tham chiếu, bạn đã cho phép một bản sao khác của biến $a chính sử dụng vùng nhớ của biến $a và ghi đè lên giá trị của biến $a là 6. Để dễ hiểu hơn, bạn hãy viết lại function trên như bên dưới đây và tự nghiệm ra cho bản thân mình nhé

<?php
function count(&$var)
{
    $var = $var + 1;
}

$a=5;
count($a);
echo $a;
// kết quả sẽ là 6
?>

Ví dụ 3 :

<?php
function add_some_extra(&$string)
{
    $string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str;    // xuất ra là 'This is a string, and something extra.'
?>

Theo mặc định, đối số của function được truyền theo giá trị nào đó (do đó nếu giá trị của các đối số trong các chức năng bị thay đổi, thì giá trị của nó không bị thay đổi bên ngoài của function). Vì vậy, để cho phép một function sửa đổi giá trị mặc đinh của đối số truyền vào, thì phải gán tham chiếu cho nó.

Bạn vẫn còn chưa hiểu và có thắc mắc, hãy để lại comment bên dưới nhé. Thân !

Nguồn : kungfuphp.com

 

Gợi ý : Bạn là người mới và muốn tìm hiểu về Bitcoin nhưng không biết bắt đầu từ đâu? Click xem ngay Hướng Dẫn Đầu Tư Bitcoin Cho Người Mới nhé!


Bình luận trực tiếp ↓

3 bình luận


  1. function count(&$var)
    {
    $var = $var + 1;
    }

    Tên hàm của bạn đặt vậy sẽ bị trùng với hàm count mặc định, sẽ báo lỗi fatal ‘cannot redeclare…’

  2. Không phải lúc nào việc pass by reference cũng nhanh, nó chỉ nhanh khi cục biến chuyền vào đủ lớn, và có thao tác write (làm thay đổi giá trị của biến) thôi. Trên thực tế, kiểu optimize sử dụng pass by reference được xem như là micro optimize và không khuyến khích sử dụng. Trong các framework phổ biến hiện nay, tất cả đều áp dụng OOP, và PHP thì pass by reference là mậc định cho object… Nên chung qui, việc để pass by reference là không đáng phải quan tâm

    http://stackoverflow.com/questions/178328/in-php-5-0-is-passing-by-reference-faster

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *