2013-01-17 18 views
0

我感到困惑下面的輸出

class A{ 
    public $v = 10;  
    function add($number){ 
     $this->v +=$number; 
    } 

} 
$a = new A; 
echo $a->v . "\n"; 
$a->add(5); 
echo $a->v . "\n"; 

爲什麼第二行輸出15而不是10?我認爲,對函數內的值所做的更改不會傳播到函數之外,除非通過引用傳遞。

+0

我認爲你需要閱讀對象。如果你使用谷歌,你可以找到一些很好的教程。 – Supericy

+2

侮辱OP沒有成就。 –

+0

現在是1593 =(反正我',新來oop(從字面上開始研究它3天前),如果你看我的所有其他職位,他們是關於程序性的PHP,CSS,SQL等... – user784637

回答

5

您的評論「對函數內的值所做的更改不會傳播到函數之外」適用於參數。其可以「按值」或「通過引用」例如被傳遞:

class A{ 
    public $v = 10;  
    function add($number){ 
     $number += $this->v; 
    } 

$b = 5; 
$a->add($b); 
echo $b; // Will still be 5; 

在上面的示例,$ B將成爲15僅當它通過引用傳遞給函數。

在你的情況,你根本沒有修改參數。你也沒有修改局部變量。您正在修改對象的屬性v$this是一個特殊的變量,也就是本地的函數,但是引用了這個對象。您修改的實際變量不是$this,也不是參數,而是屬性$a

+0

感謝您的澄清。我不明白的關鍵是'$ this' _references_ the對象 – user784637

+0

是的,如果你傳遞一個對象作爲參數,它也是一樣的,對象總是引用(或指針),這意味着即使參數本身不是引用,也可以改變它們的屬性。是通過引用,也就是說函數也可以改變* reference *,例如實際上使參數指向一個不同的對象 – GolezTrol

+0

Yah我剛剛研究過這個概念,如果通過了對象作爲參數,它將通過引用傳遞(但如果將對象的屬性作爲參數傳遞,則不會)!也感謝後續的例子。我現在明白,如果你使用'function add(&$ number)',那麼$ b的值將會增加10 – user784637

-2

但是你通過引用傳遞它。當您使用關鍵字$this時,您已經指出應該使用類屬性。

相關問題