2010-01-17 43 views
15

xem xét:= & có nghĩa là gì trong PHP?

$smarty =& SESmarty::getInstance(); 

các & là gì?

+2

Nếu bạn cần một cái gì đó như thế này trong tương lai tìm kiếm cho "nhà điều hành" trong tài liệu tham khảo trợ giúp PHP, hoặc một công cụ tìm kiếm tốt. –

+1

Bạn cũng nên tìm kiếm một cái gì đó gọi là "Singleton". – cwallenpoole

Trả lời

24

Nó chuyển qua tham chiếu. Có nghĩa là nó sẽ không tạo ra một bản sao của giá trị được thông qua.

Xem: http://php.net/manual/en/language.references.php (Xem trả lời của Adam)

Thông thường, nếu bạn vượt qua một cái gì đó như thế này:

$a = 5; 
$b = $a; 
$b = 3; 

echo $a; // 5 
echo $b; // 3 

Biến gốc ($a) sẽ không được sửa đổi nếu bạn thay đổi biến thứ hai ($b). Nếu bạn vượt qua tham chiếu:

$a = 5; 
$b =& $a; 
$b = 3; 

echo $a; // 3 
echo $b; // 3 

Bản gốc cũng được thay đổi.

Điều vô dụng khi đi qua các đối tượng, vì chúng sẽ được chuyển qua tham chiếu theo mặc định.

+5

Các đối tượng PHP5 là * không * được truyền theo tham chiếu theo mặc định: thay vào đó, một mã định danh đối tượng được chuyển bởi giá trị (tương tự như ngữ nghĩa 'tham chiếu' của Java); xem hướng dẫn sử dụng để biết chi tiết: http://www.php.net/manual/en/language.oop5.references.php – Christoph

+0

Cảm ơn, có vẻ như vô nghĩa với tôi ngay bây giờ – JasonDavis

+0

Nó thực sự là loại vô nghĩa. Lý do chính mà mọi người sử dụng chúng là không yêu cầu hàm trả về biến, mà thay vào đó chỉ cần sửa đổi biến. –

5

Trong PHP   4, nó loại (lúng túng) liên quan đến hai biến.

$j = 'original'; 
$i =& $j; 
$i = 'modified'; 
echo $j; // The output is 'modified' 

Tương tự như vậy ...

$j = 'original'; 
$i =& $j; 
$j = 'modified'; 
echo $i; // The output is 'modified' 

Một số này đã được thực hiện một chút ít khó chịu khi nói đến các đối tượng trong PHP 5, nhưng tôi nghĩ rằng trung tâm của nó là như nhau, do đó, những ví dụ nên vẫn còn hợp lệ.

1

References được sử dụng cho các biến bí danh và cần thiết để sử dụng hệ thống đối tượng cũ một cách hiệu quả.

Trong PHP   4, đối tượng cư xử giống như bất kỳ loại giá trị nào khác, nghĩa là, nhiệm vụ sẽ tạo bản sao của đối tượng. Nếu bạn muốn tránh điều này, bạn phải sử dụng một tham chiếu như trong mã ví dụ của bạn.

Với PHP 5, biến đối tượng không còn chứa chính đối tượng đó nữa, nhưng tay cầm (mã định danh đối tượng AKA) và nhiệm vụ sẽ chỉ sao chép tay cầm. Sử dụng tham chiếu không còn cần thiết nữa.