2013-02-27 33 views
6

Tôi đã thấy trong hành trình của mình để creaitng và xây dựng một số ứng dụng php của tôi, biểu tượng & ở phía trước của vars, = và tên lớp.PHP Tài liệu tham khảo: Một sự hiểu biết

Tôi hiểu rằng đây là những Tài liệu tham khảo PHP, nhưng các tài liệu tôi đã xem và xem xét dường như không giải thích nó theo cách tôi hiểu hoặc khó hiểu. Làm thế nào bạn có thể giải thích các ví dụ sau mà tôi đã thấy để làm cho chúng dễ hiểu hơn.

public static function &function_name(){...} 

    $varname =& functioncall(); 

    function ($var, &$var2, $var3){...} 

nhiều đánh giá cao

+0

Xem khối http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php '= & Tham chiếu'. – Winston

Trả lời

4

Hãy nói rằng bạn có hai chức năng

$a = 5; 
function withReference(&$a) { 
    $a++; 
} 
function withoutReference($a) { 
    $a++; 
} 

withoutReference($a); 
// $a is still 5, since your function had a local copy of $a 
var_dump($a); 
withReference($a); 
// $a is now 6, you changed $a outside of function scope 
var_dump($a); 

Vì vậy, đi qua tham số biến cho phép chức năng để sửa đổi nó ngoài phạm vi chức năng.

Ví dụ thứ hai.

Bạn có một chức năng mà trả về một tham chiếu

class References { 
    public $a = 5; 
    public function &getA() { 
     return $this->a; 
    } 
} 

$references = new References; 
// let's do regular assignment 
$a = $references->getA(); 
$a++; 
// you get 5, $a++ had no effect on $a from the class 
var_dump($references->getA()); 

// now let's do reference assignment 
$a = &$references->getA(); 
$a++; 
// $a is the same as $reference->a, so now you will get 6 
var_dump($references->getA()); 

// a little bit different 
$references->a++; 
// since $a is the same as $reference->a, you will get 7 
var_dump($a); 
+1

@ Marko D rất cảm ơn những điều trên, tôi muốn hiểu vì vậy nếu nó là bất kỳ sử dụng cho bất kỳ dự án hiện tại và nếu không phải là một tâm trí mặc dù cho những người trong tương lai. –

0

chức năng tham khảo

$name = 'alfa'; 
$address = 'street'; 
//declaring the function with the $ tells PHP that the function will 
//return the reference to the value, and not the value itself 
function &function_name($what){ 
//we need to access some previous declared variables 
GLOBAL $name,$address;//or at function declaration (use) keyword 
    if ($what == 'name') 
     return $name; 
    else 
     return $address; 
} 
//now we "link" the $search variable and the $name one with the same value 
$search =& function_name('name'); 
//we can use the result as value, not as reference too 
$other_search = function_name('name'); 
//any change on this reference will affect the "$name" too 
$search = 'new_name'; 
var_dump($search,$name,$other_search); 
//will output string 'new_name' (length=8)string 'new_name' (length=8)string 'alfa' (length=4) 

Thông thường bạn sử dụng phương pháp này với đối tượng mà thực hiện cùng một giao diện, và bạn muốn chọn đối tượng bạn muốn để làm việc tiếp theo.

Đi qua bằng cách tham khảo:

function ($var, &$var2, $var3){...} 

tôi chắc chắn rằng bạn đã thấy các ví dụ, vì vậy tôi sẽ chỉ giải thích như thế nào và khi nào thì sử dụng nó. Kịch bản cơ bản là khi nào bạn có một logic lớn mà bạn muốn áp dụng cho một đối tượng/dữ liệu hiện tại và bạn không muốn tạo thêm bản sao của nó (trong bộ nhớ). Hy vọng điều này sẽ hữu ích.

+0

cảm ơn rất nhiều vì điều này. –

Các vấn đề liên quan