trieu.dev.da
Nguyễn Thanh Triều
Tên biến trong PHP bắt đầu bằng $ nên $ entryId là tên của một biến. $ đây là một biến đặc biệt trong lập trình hướng đối tượng trong PHP, nó là tham chiếu đến đối tượng hiện tại. -> được sử dụng để truy cập một thành viên đối tượng (như thuộc tính hoặc phương thức) trong PHP, giống như cú pháp trong C ++. vì vậy mã của bạn có nghĩa là:
Đặt giá trị của biến $ entryId vào trường entryId (hoặc thuộc tính) của đối tượng này.
Toán tử & trong PHP, có nghĩa là tham chiếu vượt qua. Đây là một ví dụ:
$b=2;
$a=$b;
$a=3;
print $a;
print $b;
// output is 32
$b=2;
$a=&$b; // note the & operator
$a=3;
print $a;
print $b;
// output is 33
Trong đoạn mã trên, bởi vì chúng tôi đã sử dụng toán tử &, một tham chiếu đến nơi $ b đang trỏ được lưu trữ trong $ a. Vì vậy, $ a thực sự là một tham chiếu đến $ b.
Trong PHP, các đối số được truyền theo giá trị theo mặc định (lấy cảm hứng từ C). Vì vậy, khi gọi một hàm, khi bạn truyền các giá trị của mình vào, chúng được sao chép theo giá trị chứ không phải bằng tham chiếu. Đây là mặc định TRONG CÁC TÌNH HUỐNG NHẤT. Tuy nhiên, có một cách để chuyển qua hành vi tham chiếu, khi xác định một hàm. Thí dụ:
function plus_by_reference( &$param ) {
// what ever you do, will affect the actual parameter outside the function
$param++;
}
$a=2;
plus_by_reference( $a );
echo $a;
// output is 3
Có rất nhiều chức năng cài sẵn hoạt động như thế này. Giống như hàm sort () sắp xếp một mảng sẽ ảnh hưởng trực tiếp đến mảng và sẽ không trả về một mảng đã sắp xếp khác.
Có một cái gì đó thú vị cần lưu ý mặc dù. Vì chế độ chuyển theo giá trị có thể dẫn đến việc sử dụng nhiều bộ nhớ hơn và PHP là ngôn ngữ thông dịch (vì vậy các chương trình được viết bằng PHP không nhanh bằng các chương trình được biên dịch), để làm cho mã chạy nhanh hơn và giảm thiểu việc sử dụng bộ nhớ, có một số tinh chỉnh trong trình thông dịch PHP. Một là lazy-copy (tôi không chắc về tên). Điều này có nghĩa là:
Khi bạn chuyển một biến thành một biến khác, PHP sẽ sao chép một tham chiếu đến biến đầu tiên vào biến thứ hai. Vì vậy, biến mới của bạn, thực sự là một tham chiếu đến biến đầu tiên cho đến bây giờ. Giá trị chưa được sao chép. Nhưng nếu bạn cố gắng thay đổi bất kỳ biến nào trong số này, PHP sẽ tạo một bản sao của giá trị và sau đó thay đổi biến. Bằng cách này bạn sẽ có cơ hội tiết kiệm bộ nhớ và thời gian, NẾU BẠN KHÔNG THAY ĐỔI GIÁ TRỊ.
Vì thế:
$b=3;
$a=$b;
// $a points to $b, equals to $a=&$b
$b=4;
// now PHP will copy 3 into $a, and places 4 into $b
Sau tất cả điều này, nếu bạn muốn đặt giá trị của $ entryId vào thuộc tính 'entryId' của đối tượng, đoạn mã trên sẽ thực hiện việc này và sẽ không sao chép giá trị của entryId, cho đến khi bạn thay đổi bất kỳ giá trị nào trong số chúng, dẫn đến ít bộ nhớ hơn sử dụng. Nếu bạn thực sự muốn cả hai đều trỏ đến cùng một giá trị, thì hãy sử dụng điều này:
$this->entryId=&$entryId;
Đặt giá trị của biến $ entryId vào trường entryId (hoặc thuộc tính) của đối tượng này.
Toán tử & trong PHP, có nghĩa là tham chiếu vượt qua. Đây là một ví dụ:
$b=2;
$a=$b;
$a=3;
print $a;
print $b;
// output is 32
$b=2;
$a=&$b; // note the & operator
$a=3;
print $a;
print $b;
// output is 33
Trong đoạn mã trên, bởi vì chúng tôi đã sử dụng toán tử &, một tham chiếu đến nơi $ b đang trỏ được lưu trữ trong $ a. Vì vậy, $ a thực sự là một tham chiếu đến $ b.
Trong PHP, các đối số được truyền theo giá trị theo mặc định (lấy cảm hứng từ C). Vì vậy, khi gọi một hàm, khi bạn truyền các giá trị của mình vào, chúng được sao chép theo giá trị chứ không phải bằng tham chiếu. Đây là mặc định TRONG CÁC TÌNH HUỐNG NHẤT. Tuy nhiên, có một cách để chuyển qua hành vi tham chiếu, khi xác định một hàm. Thí dụ:
function plus_by_reference( &$param ) {
// what ever you do, will affect the actual parameter outside the function
$param++;
}
$a=2;
plus_by_reference( $a );
echo $a;
// output is 3
Có rất nhiều chức năng cài sẵn hoạt động như thế này. Giống như hàm sort () sắp xếp một mảng sẽ ảnh hưởng trực tiếp đến mảng và sẽ không trả về một mảng đã sắp xếp khác.
Có một cái gì đó thú vị cần lưu ý mặc dù. Vì chế độ chuyển theo giá trị có thể dẫn đến việc sử dụng nhiều bộ nhớ hơn và PHP là ngôn ngữ thông dịch (vì vậy các chương trình được viết bằng PHP không nhanh bằng các chương trình được biên dịch), để làm cho mã chạy nhanh hơn và giảm thiểu việc sử dụng bộ nhớ, có một số tinh chỉnh trong trình thông dịch PHP. Một là lazy-copy (tôi không chắc về tên). Điều này có nghĩa là:
Khi bạn chuyển một biến thành một biến khác, PHP sẽ sao chép một tham chiếu đến biến đầu tiên vào biến thứ hai. Vì vậy, biến mới của bạn, thực sự là một tham chiếu đến biến đầu tiên cho đến bây giờ. Giá trị chưa được sao chép. Nhưng nếu bạn cố gắng thay đổi bất kỳ biến nào trong số này, PHP sẽ tạo một bản sao của giá trị và sau đó thay đổi biến. Bằng cách này bạn sẽ có cơ hội tiết kiệm bộ nhớ và thời gian, NẾU BẠN KHÔNG THAY ĐỔI GIÁ TRỊ.
Vì thế:
$b=3;
$a=$b;
// $a points to $b, equals to $a=&$b
$b=4;
// now PHP will copy 3 into $a, and places 4 into $b
Sau tất cả điều này, nếu bạn muốn đặt giá trị của $ entryId vào thuộc tính 'entryId' của đối tượng, đoạn mã trên sẽ thực hiện việc này và sẽ không sao chép giá trị của entryId, cho đến khi bạn thay đổi bất kỳ giá trị nào trong số chúng, dẫn đến ít bộ nhớ hơn sử dụng. Nếu bạn thực sự muốn cả hai đều trỏ đến cùng một giá trị, thì hãy sử dụng điều này:
$this->entryId=&$entryId;