类返回对象混淆

时间:2012-07-27 16:02:00

标签: php

我被要求创建一个执行某些操作的类,然后返回一个只读属性的对象。现在我已经创建了类,我已经完成了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());

如何返回对象或其他内容?

5 个答案:

答案 0 :(得分:1)

您可能正在寻找关键字final。最终意味着无法覆盖对象/方法。

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

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

答案 1 :(得分:0)

self PHP保留字。您必须重命名您的变量。

答案 2 :(得分:0)

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

答案 3 :(得分: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,以便它们是只读的。以及如何重新对象(在这种情况下它会自行返回)。

答案 4 :(得分: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;
  }
}