2013-07-03 234 views
0

從上次使用對象開始工作已經有一段時間了。我無法弄清楚我做錯了什麼。我有一個包含另一個類作爲屬性的類。在Item()中實例化ItemDetail()後,我無法獲取描述的值。 var_dump($ item)爲$ detail的值賦予NULL值。請幫忙。謝謝。如何從另一個對象獲取對象值

<?php 
class Item 
{ 
    private $name; 
    private $detail; 

    function __construct() { 
    $this->name = 'some name'; 
    $this->detail = new ItemDetail(); 
    } 

    function getDetail() { 
    return $this->detail; 
    } 
} 

class ItemDetail 
{ 
    private $description; 

    function __construct() { 
    $this->description = 'some description'; 
    } 

    function getDescription { 
    return $this->description; 
    } 
} 

$item = new Item(); 
echo $item->getDetail()->getDescription(); 
//var_dump($item); 
?> 
+0

什麼是你想要得到的,從對象,沒有任何方法? – samayo

回答

2

您需要更改您的類屬性的範圍,或者定義一個返回值的方法。例如:

class Item 
{ 
    private $name; 
    private $detail; 

    function __construct() { 
    $this->name = 'some name'; 
    $this->detail = new ItemDetail(); 
    } 

    public function getDescription() { 
     return $this->detail->getDescription(); 
    } 
} 

class ItemDetail 
{ 
    private $description; 

    function __construct() { 
    $this->description = 'some description'; 
    } 

    public function getDescription() { 
     return $this->description; 
    } 
} 

$item = new Item(); 
echo $item->getDescription(); 

如果你讓你的財產公開,你可以讓他們像這樣還有:

class Item 
{ 
    public $name; 
    public $detail; 

    public function __construct() { 
    $this->name = 'some name'; 
    $this->detail = new ItemDetail(); 
    } 
} 

class ItemDetail 
{ 
    public $description; 

    public function __construct() { 
    $this->description = 'some description'; 
    } 
} 

$item = new Item(); 
echo $item->detail->description; 

這是所有關於知名度

+0

我的代碼實際上有訪問器方法,就像你的第一個例子。在Item類中,我有一個getDetail()方法返回$ this-> detail。所以在main中,我有$ item-> getDetail() - > getDescription()。我得到這個錯誤:調用一個非對象的成員函數getDescription()... – Eric

+0

我們需要看完整的代碼,看看你在做什麼。除非你在被調用的方法中返回'$ this',否則你不能鏈接這樣的方法..但是這樣做會產生錯誤的結果。 –

+0

這基本上是我迄今爲止。我只是沒有包含訪問器方法來縮短這些類。我知道我的代碼肯定會在Java中工作。我只是想知道如何在PHP中完成。我將這些類屬性設置爲私有的,以便它們不能從外部訪問。然後我創建訪問器方法來訪問這些屬性。如何顯示main()中$ description的值? – Eric