làm sao để truyền con trỏ object trong PHP5

+1 thích

trong PHP5 ta cần dùng ký tự & để truyền con trỏ của biến vào hàm, như :

class People() { }
$p = new People();
function one($a) { $a = null; }
function two(&$a) { $a = null; )

Nhưng có phải bắt buộc dùng & cho tất cả các loại biến không : biến, array , objects ...

avatar đã hỏi ngày 15 tháng 7 bởi katy.ptit (840 điểm)  

1 Câu trả lời

+1 thích
 
Hay nhất

Trong PHP có hai khái niệm tương đương với con trỏ đó là referenceidentifier. Nếu bạn muốn truyền reference thì việc dùng & là bắt buộc, ngay cả với object. Tuy nhiên đối với object khi bạn không sử dụng & thì identifier sẽ được truyền. Để phân biệt identifier và reference ta có thể xem ví dụ sau:

class A
{
    public $v = 1;
}

function change($obj) 
{
    $obj->v = 2;
}

function makezero($obj)
{
    $obj = 0;
}

$a = new A();

change($a);

var_dump($a); 

/* 
output:

object(A)#1 (1) {
  ["v"]=>
  int(2)
}

*/
makezero($a);

var_dump($a);

/* 
output:

object(A)#1 (1) {
  ["v"]=>
  int(2)
}
*/

Thực ra identifier là một reference đến một reference khác. Tại sao sau khi gọi makezeroa không nhận giá trị 0 ? Bởi vì chúng ta chỉ ghi đè lên một identifier là một con trỏ của một con trỏ của a nên a sẽ không thay đổi. Nếu định nghĩa lại hàm makezero như sau thì chắc chắn a sẽ bị thay đổi.

function makezero(&$obj)
{
    $obj = 0;
}
avatar trả lời ngày 15 tháng 7 bởi neo.ptit (1,880 điểm)  
đã được chọn ngày 15 tháng 7 bởi admin
...