Hướng dẫn what are the advantages of call by value in php - những lợi thế của cuộc gọi theo giá trị trong php là gì

Cải thiện bài viết

Lưu bài viết

Các chức năng có thể được gọi theo hai cách: gọi theo giá trị hoặc gọi theo tham chiếu. Hai cách này thường được phân biệt bởi loại giá trị được truyền cho chúng dưới dạng tham số.Call by Value or Call by Reference. These two ways are generally differentiated by the type of values passed to them as parameters.

Các tham số được truyền đến hàm được gọi là tham số thực tế trong khi các tham số nhận được theo hàm được gọi là tham số chính thức.

Gọi theo giá trị: Trong phương thức chuyển tham số này, các giá trị của các tham số thực tế được sao chép vào các tham số chính thức của hàm và hai loại tham số được lưu trữ ở các vị trí bộ nhớ khác nhau. Vì vậy, bất kỳ thay đổi nào được thực hiện trong các chức năng bên trong không được phản ánh trong các tham số thực tế của người gọi.: In this parameter passing method, values of actual parameters are copied to function’s formal parameters and the two types of parameters are stored in different memory locations. So any changes made inside functions are not reflected in actual parameters of the caller.

Gọi bằng tham chiếu: Cả hai tham số thực tế và chính thức đều đề cập đến cùng một vị trí, do đó, bất kỳ thay đổi nào được thực hiện bên trong hàm thực sự được phản ánh trong các tham số thực tế của người gọi.: Both the actual and formal parameters refer to the same locations, so any changes made inside the function are actually reflected in actual parameters of the caller.

Gọi theo giá trịGọi bằng cách tham khảo
Trong khi gọi một hàm, chúng tôi truyền các giá trị của các biến cho nó. Các chức năng như vậy được gọi là cuộc gọi của các giá trị.Trong khi gọi một hàm, thay vì truyền các giá trị của các biến, chúng tôi chuyển địa chỉ của các biến [vị trí của các biến] cho hàm được gọi là cuộc gọi của các tài liệu tham khảo.
Trong phương pháp này, giá trị của mỗi biến trong hàm gọi được sao chép thành các biến giả tương ứng của hàm được gọi.Trong phương pháp này, địa chỉ của các biến thực tế trong hàm gọi được sao chép vào các biến giả của hàm được gọi.
Với phương pháp này, các thay đổi được thực hiện đối với các biến giả trong hàm được gọi không có ảnh hưởng đến các giá trị của các biến thực tế trong hàm gọi.Với phương pháp này, sử dụng địa chỉ, chúng tôi sẽ có quyền truy cập vào các biến thực tế và do đó chúng tôi có thể thao tác chúng.
// C program to illustrate
// call by value

#include 

// Function Prototype
void swapx[int x, int y];

// Main function
int main[]
{
    int a = 10, b = 20;

    // Pass by Values
    swapx[a, b];

    printf["a=%d b=%d\n", a, b];

    return 0;
}

// Swap functions that swaps
// two values
void swapx[int x, int y]
{
    int t;

    t = x;
    x = y;
    y = t;

    printf["x=%d y=%d\n", x, y];
}


Output:
x=20 y=10
a=10 b=20
// C program to illustrate
// Call by Reference

#include 

// Function Prototype
void swapx[int*, int*];

// Main function
int main[]
{
    int a = 10, b = 20;

    // Pass reference
    swapx[&a, &b];

    printf["a=%d b=%d\n", a, b];

    return 0;
}

// Function to swap two variables
// by references
void swapx[int* x, int* y]
{
    int t;

    t = *x;
    *x = *y;
    *y = t;

    printf["x=%d y=%d\n", *x, *y];
}

Output:
x=20 y=10
a=20 b=10
Do đó, các giá trị thực của A và B vẫn không thay đổi ngay cả sau khi trao đổi các giá trị của X và Y.Do đó, các giá trị thực của A và B được thay đổi sau khi trao đổi các giá trị của X và Y.
Trong các giá trị cuộc gọi, chúng ta không thể thay đổi các giá trị của các biến thực tế thông qua các cuộc gọi hàm.Trong cuộc gọi bằng tham chiếu, chúng ta có thể thay đổi các giá trị của các biến thông qua các cuộc gọi chức năng.
Giá trị của các biến được truyền qua kỹ thuật đơn giản.Các biến con trỏ là cần thiết để xác định để lưu trữ các giá trị địa chỉ của các biến.

Lưu ý: Trong C, chúng tôi sử dụng con trỏ để đạt được cuộc gọi bằng cách tham khảo. Trong C ++, chúng ta có thể sử dụng con trỏ hoặc tài liệu tham khảo để vượt qua tham chiếu. Trong Java, các loại nguyên thủy được truyền dưới dạng giá trị và các loại không nguyên thủy luôn là tài liệu tham khảo.In C, we use pointers to achieve call by reference. In C++, we can either use pointers or references for pass by reference. In Java, primitive types are passed as values and non-primitive types are always references.

Gọi theo giá trị và gọi theo tham chiếu là hai kỹ thuật khác nhau để gọi hàm hoặc phương thức trong một chương trình. Kỹ thuật gọi theo giá trị chỉ truyền các giá trị của các biến. Mặt khác, gọi bằng kỹ thuật tham chiếu vượt qua địa chỉ của các biến.

Nếu bạn đang chuyển các đối số cho một hàm bằng cách sử dụng kỹ thuật ‘cuộc gọi theo giá trị, thì hãy thay đổi các biến bên trong hàm won đã ảnh hưởng đến các giá trị ban đầu của các biến đó.

Nếu bạn chuyển các đối số cho một hàm bằng cách sử dụng kỹ thuật ‘cuộc gọi bằng cách tham chiếu, thì các thay đổi thành các biến bên trong hàm sẽ ảnh hưởng đến các giá trị ban đầu của các biến đó.

Trong phần này, chúng tôi sẽ thảo luận chi tiết về các kỹ thuật này. Chúng tôi cũng sẽ cố gắng xác định sự khác biệt giữa hai kỹ thuật này.

  1. Biểu đồ so sánh
  2. Cuộc gọi theo giá trị là gì?
    • Ưu điểm của cuộc gọi theo giá trị
    • Thí dụ
  3. Cuộc gọi là gì bằng tài liệu tham khảo là gì?
    • Thí dụ
  4. Cuộc gọi là gì bằng tài liệu tham khảo là gì?
  5. Sự kết luận

Biểu đồ so sánh

Cuộc gọi theo giá trị là gì?Ưu điểm của cuộc gọi theo giá trịThí dụ
Cuộc gọi là gì bằng tài liệu tham khảo là gì?Sự khác biệt chínhCơ sở để so sánh
Gọi theo giá trịGọi bằng cách tham khảoNền tảng
Một bản sao của biến được thông qua.Một biến chính được thông qua.Hiệu ứng
//in case of object
object.func_name[ object];
Thay đổi trong một bản sao của biến không sửa đổi giá trị ban đầu của bên ngoài chức năng.Thay đổi trong biến cũng ảnh hưởng đến giá trị của biến bên ngoài hàm.
{ . . }
Gọi tham số
{ . . }
//in case of object
type function_name[class_type object_name]
{ . . }
function_name [biến_name1, biến_name2, ..];function_name [& varable_name1, & varable_name2, ..]; // Trong trường hợp đối tượng đối tượng.func_name [đối tượng];Nhận tham số
loại function_name [loại biến_name1, loại biến_name2, ..] {. . }loại function_name [loại *biến_name1, loại *biến_name2, ..] {. . } // trong trường hợp loại đối tượng function_name [class_type object_name] {. . }Gọi mặc định
Loại nguyên thủy được truyền bằng cách sử dụng "cuộc gọi theo giá trị".Các đối tượng được truyền hoàn toàn bằng cách sử dụng "cuộc gọi bằng tham chiếu".Vị trí bộ nhớ

Cuộc gọi theo giá trị là gì?

Ưu điểm của cuộc gọi theo giá trị

Thí dụ

LƯU Ý: Với cách tiếp cận giữa các giá trị, chúng ta chỉ có thể chuyển các biến với kiểu dữ liệu nguyên thủy [chỉ số nguyên, ký tự và chuỗi].: With the call-by-value approach, we can pass variables with the primitive data type [integer, character, and string ] only.

Ưu điểm của cuộc gọi theo giá trị

  • Kỹ thuật gọi theo giá trị không thay đổi giá trị ban đầu của biến được truyền.
  • Nó tránh sự thay đổi tình cờ của các giá trị của các biến thực tế.

Ví dụ về cuộc gọi theo giá trị

Hãy cùng xem một ví dụ để hiểu ngắn gọn điều này.

//example in Java
class check
{
void change[ int i, int j]
{
i = i*i;
j = j/2;
System.out.println[ "value of parameter inside the function"];
System.out.println[ " value of 'i' which accepts the value of argument 'a' " +i];
System.out.println[ " value of 'j' which accepts the value of argument 'b' " +j];
}
}
public class call_by_value
{
public static void main[String args[]]
{
int a=12, b=20;
check C= new check[];
System.out.println["value of 'a' and 'b' before function call - " + a +" " +b];
C.change[a,b]; //call by value.
System.out.println["value of 'a' and 'b' after function call - " + a +" " +b];
}
}
//output
value of 'a' and 'b' before function call - 12 20
value of parameter inside the function
value of 'i' which accepts the value of argument 'a' 144
value of 'j' which accepts the value of argument 'b' 10
value of 'a' and 'b' after function call - 12 20

Cuộc gọi là gì bằng tài liệu tham khảo là gì?

Gọi theo phương thức tham chiếu chuyển một tham chiếu/địa chỉ của các biến đến hàm dưới dạng tham số thực tế. Ở đây, tham số thực tế và chính thức có chung vị trí bộ nhớ.

Trong các cuộc gọi chức năng, địa chỉ của các biến trong các tham số thực tế được sao chép vào các biến con trỏ của các tham số chính thức. Tham số chính thức của chức năng đề cập đến giá trị ban đầu của biến. Vì vậy, bất kỳ thay đổi nào được thực hiện đối với các tham số chính thức đều ảnh hưởng đến giá trị ban đầu của biến.

Trong C ++ và Java, rất phổ biến để truyền đối tượng vào hàm/phương thức và các đối tượng luôn được truyền bởi tài liệu tham khảo của nó. Do đó, các thay đổi được thực hiện đối với đối tượng bên trong hàm/phương thức ảnh hưởng đến đối tượng được sử dụng để gọi hàm/phương thức đó.

LƯU Ý: Chúng tôi chuyển các biến tham chiếu đến hàm gọi với phương thức ‘cuộc gọi bằng phương thức tham chiếu. Phương pháp này tạo ra một bí danh của các tham số chính thức cho các tham số thực tế. Vì vậy, điều này biểu thị rằng hàm được gọi không tạo ra bản sao giá trị của riêng mình. Thay vào đó, nó đề cập đến các giá trị ban đầu với sự trợ giúp của tên tham chiếu. Do đó, chức năng liên quan đến dữ liệu gốc và các thay đổi được thực hiện đối với dữ liệu gốc phản ánh lại trong dữ liệu được tham chiếu.: We pass reference variables to the calling function with the ‘call by reference’ method. This method creates an alias of the formal parameters to the actual parameters. So this signifies that the called function does not create its own copy of values. Instead, it refers to the original values with the help of reference names.
Therefore, the function deals with original data, and the changes made to the original data reflect back in the referenced data.

Đặc điểm tham chiếu tham chiếu

  • Một biến tham chiếu không bao giờ có thể có một giá trị null. Do đó, nó luôn luôn đề cập đến một đối tượng hợp pháp [biến].
  • Sau khi được chỉ định, chúng tôi không thể làm cho nó nhắm mục tiêu một đối tượng khác.
  • Không cần phải thực hiện một cơ chế rõ ràng cho một biến tham chiếu để phân hủy địa chỉ bộ nhớ và truy xuất giá trị dữ liệu thực tế.

Ví dụ về cuộc gọi bằng cách tham khảo

Các đoạn sau đây cho thấy cách chính xác để gọi bằng cách tham chiếu.

//example in C++
#include 
using namespace std;
void swap[ int *x, int *y]
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
int main[]
{
int a=10, b=20;
cout

Bài Viết Liên Quan

Chủ Đề