2012-07-27 200 views
0

我一直要求創建一個類,做一些事情,但是並隨後返回一個對象具有隻讀屬性。現在我已經創建的類,我就擁有了一切工作的100%,我當他們說「有隻讀屬性返回一個對象」糊塗..類返回對象混亂

這是我的PHP文件的概要,其包含的類和一些額外的線稱之爲等:

class Book(){ 
protected $self = array(); 
function __construct{ 
    //do processing and build the array 
} 

function getAttributes(){ 
    return $this->self; //return the protected array (for reading) 
} 
} 

$book = new Book(); 

print_r($book->getAttributes()); 

有人可以幫助我返回一個對象或東西嗎?

感謝

+1

你真的應該避免調用的方法財產「自我」。這種不好的編碼習慣。 – 2012-07-27 16:04:57

回答

0

selfPHP保留字。你必須重新命名你的變量。

0

他們指的是具有privateprotected屬性的對象,只能通過setters/getters訪問。如果您僅定義getter方法,則該屬性將爲只讀。

1

您可能正在尋找關鍵字final。最後意味着對象/方法不能被覆蓋。

保護意味着對象/方法只能由它所屬的類訪問。

由於self是保留關鍵字,因此您需要更改以及聲明。重命名$self$this->self$data$this->data

+0

感謝您的回答 – 2012-07-27 16:07:48

+0

但'final'只能用於防止被覆蓋的方法。它無法保護屬性不被寫入(如Java) – 2012-07-27 16:12:00

0

喜歡的東西:

Class Book { 
    protected $attribute; 
    protected $another_attribute; 

    public function get_attribute(){ 
     return $this->attribute; 
    } 

    public function get_another_attribute() { 
     return $this->another_attribute; 
    } 

    public method get_this_book() { 
     return $this; 
    } 
} 

現在,這是一種真是愚蠢的例子,因爲書本 - > get_this_book()將返回本身。但是這應該讓你知道如何在受保護的屬性上設置getter,使它們只能讀取。以及如何重建一個對象(在這種情況下它會自行返回)。

0

只讀屬性意味着你可以訪問它們,但不能寫出來

class PropertyInaccessible { 
    //put your code here 
    protected $_data = array(); 

    public function __get($name) { 
    if(isset ($this->_data[$name])) 
     return $this->_data[$name]; 
    } 

    public function __set($name, $value) { 
    throw new Exception('Can not set property directly'); 
    } 

    public function set($name, $value) { 
    $this->_data[$name] = $value; 
    } 
}