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());

我怎样才能返回一个对象或其他东西?

4

5 回答 5

1

您可能正在寻找关键字final。Final 意味着对象/方法不能被覆盖。

受保护意味着对象/方法只能由它所属的类访问。

由于self是保留关键字,因此您需要更改它以及您的声明。重命名$self$this->self$data$this->data

于 2012-07-27T16:05:48.663 回答
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;
    }
}

现在这是一个愚蠢的例子,因为 Book->get_this_book() 会返回自己。但这应该让您了解如何在受保护的属性上设置 getter,以便它们是只读的。以及如何 reutrn 一个对象(在这种情况下它返回自己)。

于 2012-07-27T16:08:54.817 回答
0

selfPHP 的保留字。你必须重命名你的变量。

于 2012-07-27T16:04:34.613 回答
0

他们指的是一个具有privateorprotected属性的对象,只能由setters/访问getters。如果您只定义方法,则该属性将是只读的getter

于 2012-07-27T16:05:16.087 回答
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;
  }
}
于 2012-07-27T16:11:22.523 回答