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.

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ì
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<<"value of a, b before the function call - "<

Bây giờ, hãy để thảo luận về cuộc gọi bằng cách tham khảo bằng cách truyền một ‘đối tượng, như một đối số, được thông qua hoàn toàn bởi cách tiếp cận‘ cuộc gọi bằng cách tham chiếu.

class check
{
int a, b;
check( int x, int y)
{
// object initialized through this constrtuctor
a=x;
b=y;
}
void exchange(check ob)
{
ob.a= ob.a*2;
ob.b= ob.b/2;
}
}
class Main_class
{
public static void main(String args[ ])
{
check C = new check(20,40); //object initialization.
System.out.println("value of 'ob.a' and 'ob.b' before function call - " + C.a +" " + C.b);
C.exchange(C); //call by reference.
System.out.println("value of 'ob.a' and 'ob.b' before function call - " + C.a +" " + C.b);
}
}
//output
value of 'C.a' and 'C.b' before function call - 20 40
value of 'C.a' and 'C.b' before function call - 40 20

Sự khác biệt chính giữa cuộc gọi theo giá trị và cuộc gọi theo tham chiếu

  1. Truyền đối số bằng cách sử dụng phương pháp ‘cuộc gọi theo giá trị, chỉ truyền bản sao của biến đó, do đó, các thay đổi được thực hiện đối với giá trị trong bản sao của biến đó không ảnh hưởng đến giá trị ban đầu của biến đó. Ngược lại, trong cách tiếp cận ‘cuộc gọi theo cách tiếp cận tham chiếu, bản thân biến được truyền như một đối số, do đó, thay đổi để sửa đổi giá trị của biến ban đầu.
  2. Nếu các đối số được truyền là các kiểu dữ liệu nguyên thủy, chúng chỉ đơn giản là ‘gọi theo giá trị. Để chống lại, nếu các tham chiếu/địa chỉ của các đối số hoặc đối tượng được truyền, thì một hàm được gọi bằng phương thức gọi theo tham chiếu.
  3. Trong ‘cuộc gọi theo cách tiếp cận giá trị, các đối số được truyền chỉ là tên của các biến. Ngược lại, trong cách tiếp cận ‘cuộc gọi theo cách tiếp cận tham chiếu, các đối số được truyền là các tên biến dọc theo dấu hiệu‘ &, hoặc một đối tượng được truyền chỉ bằng tên của nó.
  4. Nhận các tham số của đối số trong ‘cuộc gọi theo cách tiếp cận giá trị là các tên biến cùng với kiểu dữ liệu của chúng. Mặt khác, trong cách tiếp cận ‘cuộc gọi theo cách tiếp cận tham chiếu, tham số nhận luôn là một biến con trỏ cùng với kiểu dữ liệu và trong trường hợp của đối tượng, nó là một tên đối tượng cùng với loại lớp của nó.
  5. Gọi theo phương thức giá trị tạo một vị trí bộ nhớ khác cho các tham số thực tế và chính thức. Ngược lại, gọi theo phương thức tham chiếu có cùng vị trí bộ nhớ cho cả tham số thực tế và chính thức.
  6. Với phương thức ‘Call by Giá trị, các giá trị ban đầu của biến an toàn hơn so với phương thức‘ Call by tham chiếu.

Sự kết luận

C ++ và Java sử dụng cả hai phương pháp tùy thuộc vào những gì được thông qua. Nếu bạn chỉ muốn vượt qua giá trị của biến, hãy sử dụng phương pháp ‘cuộc gọi theo giá trị và nếu bạn muốn thấy sự thay đổi trong giá trị ban đầu của biến, thì hãy sử dụng phương pháp‘ Call by tham chiếu.

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

Ưu điểm của việc sử dụng phương thức gọi theo giá trị, chúng như sau: Trước hết, phương thức không thay đổi biến ban đầu. Nói cách khác, nó đang bảo tồn dữ liệu. Thứ hai, bất cứ khi nào một hàm được gọi, nó không bao giờ tác động đến nội dung thực tế của các đối số thực tế.the method does not change the original variable. In other words, it is preserving data. Secondly, whenever a function is called, it does not ever impact the actual contents of the actual arguments.

Những lợi thế của cuộc gọi bằng cách tham khảo là gì?

Ưu điểm của việc sử dụng cuộc gọi bằng phương thức tham chiếu..
Đầu tiên, hàm có thể thay đổi giá trị của đối số.....
Thứ hai, nó không tạo dữ liệu trùng lặp để chỉ giữ một giá trị giúp lưu không gian bộ nhớ ..
Thứ ba, không có bản sao của các đối số nào được thực hiện trong phương pháp này, do đó nó được xử lý rất nhanh ..

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

Gọi theo giá trị có nghĩa là chuyển giá trị trực tiếp đến một hàm.Hàm được gọi sử dụng giá trị trong một biến cục bộ;Bất kỳ thay đổi nào đối với nó không ảnh hưởng đến biến nguồn.Gọi bằng tham chiếu có nghĩa là chuyển địa chỉ của một biến trong đó giá trị thực tế được lưu trữ.passing the value directly to a function. The called function uses the value in a local variable; any changes to it do not affect the source variable. Call by reference means passing the address of a variable where the actual value is stored.

Cuộc gọi nào tốt hơn theo giá trị hoặc cuộc gọi theo tham chiếu?

Ngoài ra, trong hầu hết các trường hợp, bạn muốn dữ liệu được riêng tư và ai đó gọi chức năng chỉ có thể thay đổi nếu bạn muốn.Vì vậy, tốt hơn là sử dụng một cuộc gọi theo giá trị theo mặc định và chỉ sử dụng cuộc gọi bằng tham chiếu nếu dự kiến thay đổi dữ liệu.