2016-08-30 54 views
0

通過參考獲得數值的兩種方法之間是否有實際區別?使用或不使用函數返回參考

方式1種

<?php 
class foo { 
    public $value = 42; 

    public function &getValue() { 
     return $this->value; 
    } 
} 

$obj = new foo; 
$myValue = &$obj->getValue(); 
// $myValue is a reference to $obj->value, which is 42. 
$obj->value = 2; 
echo $myValue; 
// prints the new value of $obj->value, i.e. 2. 
?> 

方式2

<?php 
class foo { 
    public $value = 42; 
    public function getValue() { 
     return $this->value; 
    } 
} 

$obj = new foo; 
$myValue = &$obj->value; 
$obj->value = 2; 
echo $myValue; 
?> 

在兩種情況下被打印。那麼爲什麼需要getValue()函數呢?第一個例子取自PHP Manual

+0

PHP中的3條引用規則是:規則1)不要使用引用。規則#2)不要使用引用。規則#3)不要使用引用。 – Sherif

+0

@Sherif最好不要使用對象,然後;-) – jeroen

+0

@ jeroen不知道你爲什麼這麼說。對象不是引用。 – Sherif

回答

0

如果類字段沒有修飾符'public',則需要第一種方法。在這種情況下,您無法獲得課堂以外的字段的引用。請參閱示例:

<?php 

class foo 
{ 
    protected $value = 1; 

    public function setValue($value) 
    { 
     $this->value = $value; 
    } 

    public function &getValue() 
    { 
     return $this->value; 
    } 
} 

$obj = new foo; 
$myValue = &$obj->getValue(); 
$obj->setValue(2); 
echo $myValue; 
?> 
+0

即使房產知名度不公開,您也絕對不會在所有房間中提供參考。它將使用公共setter/getter方法工作得很好。使用引用只會破壞您的代碼,並導致奇怪的尷尬難以調試錯誤,而沒有任何優勢。 – Sherif

+0

@Sherif這不是一個必然的問題。這是第一種方法可以使用時的解釋。開發人員可以使用或不使用。 –

+0

不幸的是,解釋是錯誤的。如果您希望開發人員對使用什麼做出明智的選擇,您需要真正解釋它的優點。這沒有解釋。它只是描繪了__應該使用什麼,這只是純粹的倡導,而不是解釋。 – Sherif