Hướng dẫn discuss parameter passing by value and reference in php - thảo luận về việc truyền tham số theo giá trị và tham chiếu trong php


Trong bài viết này, chúng tôi sẽ tìm hiểu về vượt qua giá trị và vượt qua bằng cách tham khảo trong PHP. & NBSP;

Bây giờ, hãy để hiểu chi tiết hai khái niệm này.

Trong PHP nói chung, chúng tôi đã làm theo để chuyển các đối số cho hàm với cách tiếp cận giá trị được truyền. Chúng tôi đang tuân theo thực tiễn này bởi vì nếu giá trị của đối số trong hàm được thay đổi, nó không bị thay đổi bên ngoài hàm.

Trong một số trường hợp, chúng ta có thể cần sửa đổi các đối số chức năng, vì vậy để cho phép một hàm sửa đổi các đối số của nó, chúng phải được truyền bằng cách tham chiếu.

Hãy bắt đầu bằng việc được thông qua bởi tham chiếu. Vì nó đã được đề cập, chúng tôi có thể chuyển một biến bằng cách tham chiếu đến một hàm để hàm có thể sửa đổi biến. Để bắt đầu quá trình truyền các tham số được truyền qua tham chiếu, hãy dành cho một ampersand và) cho tên đối số trong định nghĩa hàm.

Thí dụ

Hãy kiểm tra điều này với một ví dụ đơn giản.

Đầu ra

6

Giải trình

Ở đây chúng tôi đã khai báo biến $ a và chuyển nó dưới dạng thông qua tham chiếu đến hàm tính toán (). Vì vậy, như nguyên tắc nói rằng nếu giá trị của $ a được thay đổi bên trong hàm thì nó cũng sẽ thay đổi bên ngoài hàm.

Ghi chú

Không có dấu hiệu tham chiếu trên một cuộc gọi chức năng - chỉ trên các định nghĩa chức năng. Định nghĩa chức năng một mình là đủ để vượt qua chính xác đối số bằng cách tham khảo. Điều này không được dùng trong phiên bản 5.4 của PHP khi bạn sử dụng để tính toán (& $ a); Nó ném một lỗi.

Thí dụ

Hãy kiểm tra điều này với một ví dụ đơn giản.

";
   }
   $a=5;
   calculate($a);
   echo $a;
?>

Đầu ra

6
5

Giải trình

Ở đây chúng tôi đã khai báo biến $ a và chuyển nó dưới dạng thông qua tham chiếu đến hàm tính toán (). Vì vậy, như nguyên tắc nói rằng nếu giá trị của $ a được thay đổi bên trong hàm thì nó cũng sẽ thay đổi bên ngoài hàm.

Hướng dẫn discuss parameter passing by value and reference in php - thảo luận về việc truyền tham số theo giá trị và tham chiếu trong php

Ghi chú

  • Không có dấu hiệu tham chiếu trên một cuộc gọi chức năng - chỉ trên các định nghĩa chức năng. Định nghĩa chức năng một mình là đủ để vượt qua chính xác đối số bằng cách tham khảo. Điều này không được dùng trong phiên bản 5.4 của PHP khi bạn sử dụng để tính toán (& $ a); Nó ném một lỗi.
  • Hãy kiểm tra một ví dụ để hiểu qua giá trị.
  • Ở đây chúng tôi đã chuyển giá trị cho hàm tính toán () khi được truyền theo giá trị. Giá trị của nó được thay đổi bên trong hàm nhưng điều đó không được phản ánh bên ngoài hàm. Giá trị của biến vẫn giống nhau bên ngoài hàm.
  • Cập nhật vào ngày 29 tháng 6 năm 2020 08:51:12
  • Câu hỏi và câu trả lời liên quan
  • Java có vượt qua tham chiếu hoặc vượt qua giá trị không?
  • Mô tả vượt qua giá trị và vượt qua tham chiếu trong JavaScript?
  • Vượt qua tham chiếu vs vượt qua giá trị trong java
  • Sự khác biệt giữa vượt qua bằng giá trị và vượt qua tham chiếu trong C ++
  • JavaScript có phải là một ngôn ngữ ngang qua hoặc giao thông không?
  • Vượt qua bằng tham chiếu vs giá trị trong Python
  • Cái nào tốt hơn ở giữa vượt qua giá trị hoặc vượt qua tham chiếu trong C ++?
  • Truyền qua tài liệu tham khảo bằng ngôn ngữ C là gì?
  • Sự khác biệt giữa các thông số truyền qua giá trị và tham chiếu trong C#là gì?
  • Truyền qua giá trị bằng ngôn ngữ C là gì?
  • Làm thế nào để bạn vượt qua các đối tượng bằng cách tham khảo trong PHP 5?

Tianyiw tại VIP Dot qq dot com ¶

function foo(&$var)
{
    
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>

1 năm trước: There is no reference sign on a function call - only on function definitions. Function definitions alone are enough to correctly pass the argument by reference.

Những điều sau đây có thể được thông qua bằng cách tham khảo:

  • Biến, tức là foo($a)
  • Các tài liệu tham khảo được trả về từ các chức năng, tức là:

    function foo(&$var)
    {
        
    $var++;
    }
    function &
    bar()
    {
        
    $a 5;
        return 
    $a;
    }
    foo(bar());
    ?>

    Xem thêm về trả lại bằng cách tham khảo.

Không có biểu thức nào khác nên được truyền qua tham chiếu, vì kết quả không được xác định. Ví dụ: các ví dụ sau về việc truyền qua tham chiếu không hợp lệ:

function foo(&$var)
{
    
$var++;
}
function 
bar() // Note the missing &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Produces a noticefoo($a 5); // Expression, not variable
foo(5); // Produces fatal errorclass Foobar
{
}
foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                  // Notice: Only variables should be passed by reference
?>

Tnestved tại Yahoo Dot Com ¶

8 năm trước

By removing the ability to include the reference sign on function calls where pass-by-reference is incurred (I.e., function definition uses &), the readability of the code suffers, as one has to look at the function definition to know if the variable being passed is by-ref or not (I.e., potential to be modified).  If both function calls and function definitions require the reference sign (I.e., &), readability is improved, and it also lessens the potential of an inadvertent error in the code itself.  Going full on fatal error in 5.4.0 now forces everyone to have less readable code.  That is, does a function merely use the variable, or potentially modify it...now we have to find the function definition and physically look at it to know, whereas before we would know the intent immediately.

ccb_bc tại hotmail dot com ¶

3 năm trước

// PHP >= 5.6

6
0

6
1

Mike tại Eastghost Dot Com ¶

7 năm trước

6
2

6
3

6
4

6
5

Nickshanks tại Nickshanks Dot Com ¶

5 năm trước

6
6

6
7

6
8

6
9

Rob tại Librobert Dot Net

11 thàng trước

";
   }
   $a=5;
   calculate($a);
   echo $a;
?>
0

";
   }
   $a=5;
   calculate($a);
   echo $a;
?>
1

";
   }
   $a=5;
   calculate($a);
   echo $a;
?>
2

";
   }
   $a=5;
   calculate($a);
   echo $a;
?>
3

";
   }
   $a=5;
   calculate($a);
   echo $a;
?>
4

";
   }
   $a=5;
   calculate($a);
   echo $a;
?>
5

6
5

Jason Steelman ¶

2 năm trước

";
   }
   $a=5;
   calculate($a);
   echo $a;
?>
7

";
   }
   $a=5;
   calculate($a);
   echo $a;
?>
8

6
5

PHPNet tại Holodyn dot com ¶

8 năm trước

6
5
0

6
5
1

6
5

ccb_bc tại hotmail dot com ¶

3 năm trước

6
5
3

6
5
4

6
5
5

6
5
6

6
5
7

6
5
8

Mike tại Eastghost Dot Com ¶

2 năm trước

6
5
9

function foo(&$var)
{
    
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
0

function foo(&$var)
{
    
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
1

function foo(&$var)
{
    
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
2

6
5

PHPNet tại Holodyn dot com ¶

diabolos @t gmail dot com

function foo(&$var)
{
    
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
4

function foo(&$var)
{
    
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
5

function foo(&$var)
{
    
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
6

function foo(&$var)
{
    
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
7

10 năm trước

Yiangforwork tại Gmail Dot Com ¶

function foo(&$var)
{
    
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
8

function foo(&$var)
{
    
$var++;
}
$a=5;
foo($a);
// $a is 6 here
?>
9

foo($a)0

foo($a)1

foo($a)2

foo($a)3

Tianyiw tại VIP Dot qq dot com ¶

5 năm trước

foo($a)4

foo($a)5

foo($a)6

6
5

Rob tại Librobert Dot Net

7 năm trước

foo($a)8

foo($a)9

function foo(&$var)
{
    
$var++;
}
function &
bar()
{
    
$a 5;
    return 
$a;
}
foo(bar());
?>
0

6
5

Nickshanks tại Nickshanks Dot Com ¶

18 năm trước

function foo(&$var)
{
    
$var++;
}
function &
bar()
{
    
$a 5;
    return 
$a;
}
foo(bar());
?>
2

function foo(&$var)
{
    
$var++;
}
function &
bar()
{
    
$a 5;
    return 
$a;
}
foo(bar());
?>
3

function foo(&$var)
{
    
$var++;
}
function &
bar()
{
    
$a 5;
    return 
$a;
}
foo(bar());
?>
4

function foo(&$var)
{
    
$var++;
}
function &
bar()
{
    
$a 5;
    return 
$a;
}
foo(bar());
?>
5

Pillepop2003 tại Yahoo Dot de ¶

17 năm trước

function foo(&$var)
{
    
$var++;
}
function &
bar()
{
    
$a 5;
    return 
$a;
}
foo(bar());
?>
6

function foo(&$var)
{
    
$var++;
}
function &
bar()
{
    
$a 5;
    return 
$a;
}
foo(bar());
?>
7

function foo(&$var)
{
    
$var++;
}
function &
bar()
{
    
$a 5;
    return 
$a;
}
foo(bar());
?>
8

function foo(&$var)
{
    
$var++;
}
function &
bar()
{
    
$a 5;
    return 
$a;
}
foo(bar());
?>
9

function foo(&$var)
{
    
$var++;
}
function 
bar() // Note the missing &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Produces a noticefoo($a 5); // Expression, not variable
foo(5); // Produces fatal errorclass Foobar
{
}
foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                  // Notice: Only variables should be passed by reference
?>
0

6
5

obkvresovl tại nospam dot hotmail dot com ¶

17 năm trước

function foo(&$var)
{
    
$var++;
}
function 
bar() // Note the missing &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Produces a noticefoo($a 5); // Expression, not variable
foo(5); // Produces fatal errorclass Foobar
{
}
foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                  // Notice: Only variables should be passed by reference
?>
2

function foo(&$var)
{
    
$var++;
}
function 
bar() // Note the missing &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Produces a noticefoo($a 5); // Expression, not variable
foo(5); // Produces fatal errorclass Foobar
{
}
foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                  // Notice: Only variables should be passed by reference
?>
3

function foo(&$var)
{
    
$var++;
}
function 
bar() // Note the missing &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Produces a noticefoo($a 5); // Expression, not variable
foo(5); // Produces fatal errorclass Foobar
{
}
foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                  // Notice: Only variables should be passed by reference
?>
4

function foo(&$var)
{
    
$var++;
}
function 
bar() // Note the missing &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Produces a noticefoo($a 5); // Expression, not variable
foo(5); // Produces fatal errorclass Foobar
{
}
foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                  // Notice: Only variables should be passed by reference
?>
5

obkvresovl tại nospam dot hotmail dot com ¶

pallsopp tại gmail dot com ¶

function foo(&$var)
{
    
$var++;
}
function 
bar() // Note the missing &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Produces a noticefoo($a 5); // Expression, not variable
foo(5); // Produces fatal errorclass Foobar
{
}
foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                  // Notice: Only variables should be passed by reference
?>
6

function foo(&$var)
{
    
$var++;
}
function 
bar() // Note the missing &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Produces a noticefoo($a 5); // Expression, not variable
foo(5); // Produces fatal errorclass Foobar
{
}
foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                  // Notice: Only variables should be passed by reference
?>
7

function foo(&$var)
{
    
$var++;
}
function 
bar() // Note the missing &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Produces a noticefoo($a 5); // Expression, not variable
foo(5); // Produces fatal errorclass Foobar
{
}
foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                  // Notice: Only variables should be passed by reference
?>
8

6
5

Có nghĩa là gì bằng cách truyền một tham số theo giá trị và bằng cách tham chiếu?

Vượt qua giá trị của người Viking đề cập đến việc truyền một bản sao của giá trị. Đi qua tham chiếu, đề cập đến việc truyền tham chiếu thực của biến trong bộ nhớ. “Passing by reference” refers to passing the real reference of the variable in memory.

Tham số truyền trong PHP là gì?

Các hàm tham số PHP là các hàm với các tham số.Bạn có thể vượt qua bất kỳ số lượng tham số bên trong một hàm.Các tham số được truyền này hoạt động như các biến bên trong chức năng của bạn.Chúng được chỉ định bên trong dấu ngoặc đơn, sau tên hàm.You can pass any number of parameters inside a function. These passed parameters act as variables inside your function. They are specified inside the parentheses, after the function name.

Tham số đi qua tham chiếu là gì?

Đi qua bởi tham chiếu đề cập đến một phương thức chuyển địa chỉ của một đối số trong hàm gọi cho một tham số tương ứng trong hàm được gọi.Trong C, tham số tương ứng trong hàm được gọi phải được khai báo là loại con trỏ.a method of passing the address of an argument in the calling function to a corresponding parameter in the called function. In C, the corresponding parameter in the called function must be declared as a pointer type.

Tham số đi qua giá trị là gì?

Khi bạn sử dụng từng giá trị, trình biên dịch sẽ sao chép giá trị của đối số trong hàm gọi thành tham số không phải con trỏ hoặc không tham chiếu tương ứng trong định nghĩa hàm được gọi.Tham số trong hàm được gọi được khởi tạo với giá trị của đối số được truyền.the compiler copies the value of an argument in a calling function to a corresponding non-pointer or non-reference parameter in the called function definition. The parameter in the called function is initialized with the value of the passed argument.