2012-07-18 183 views
1

最近我一直在嘗試自我教導一些OOP,並且我遇到了一些似乎對我來說很奇怪的東西。我想知道是否有人可以向我解釋這一點。屬性未被構造函數定義

我在這個網站啓發的一個問題來嘗試這個小試件的代碼(PHP):

class test1 { 
    function foo ($x = 2, $y = 3) { 
    return new test2($x, $y); 
    } 
} 

class test2 { 
    public $foo; 
    public $bar; 
    function __construct ($x, $y) { 
     $foo = $x; 
     $bar = $y; 
    } 
    function bar() { 
     echo $foo, $bar; 
    } 
} 

$test1 = new test1; 
$test2 = $test1->foo('4', '16'); 
var_dump($test2); 
$test2->bar(); 

簡單的東西。 $test1應該內$test2NULL對象返回到$test2,與$test2->foo等於4並且$test2->bar等於16我的這一問題是,雖然$test2被製成test2類的一個對象,既$foo$bar。構造函數肯定正在運行 - 如果我在構造函數中回顯$foo$bar,它們將顯示出來(使用正確的值,不會少於)。然而,儘管他們被分配了$test1->foo的值,但他們不會通過var_dump$test2->bar顯示出來。有人能向我解釋這種對知識的好奇嗎?

+4

$這個 - >富= $ X; $ this-> bar = $ y;在構造函數中;和功能欄(){ echo $ this-> foo,$ this-> bar; }否則$ foo和$ bar只是局部範圍變量 – 2012-07-18 21:28:50

+0

可能重複的[PHP變量在類中](http://stackoverflow.com/questions/1292939/php-variables-in-classes) – Gordon 2012-07-18 21:37:06

回答

6

你的語法是錯誤的,它應該是:

class test2 { 
    public $foo; 
    public $bar; 
    function __construct ($x, $y) { 
     $this->foo = $x; 
     $this->bar = $y; 
    } 
    function bar() { 
     echo $this->foo, $this->bar; 
    } 
} 
+1

哇,這是粗心的我的。謝謝! – Palladium 2012-07-18 21:28:19

+0

@鈀:jeroen說得對。不要忘記接受他的回答。 – 2012-07-18 21:32:13

2

你應該訪問你的類成員 '這個':

function __construct ($x, $y) { 
    $this->foo = $x; 
    $this->bar = $y; 
}