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 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 に答える
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() は自分自身を返すので、これはちょっとばかげた例です。ただし、これにより、保護されたプロパティにゲッターを設定して読み取り専用にする方法がわかります。また、オブジェクトを返す方法 (この場合はそれ自体を返します)。

于 2012-07-27T16:08:54.817 に答える
0

selfPHP の予約語です。変数の名前を変更する必要があります。

于 2012-07-27T16:04:34.613 に答える
0

彼らが参照しているのは、/によってのみアクセスできるprivateまたはプロパティを持つオブジェクトです。メソッドを定義するだけの場合、プロパティは読み取り専用になります。protectedsettersgettersgetter

于 2012-07-27T16:05:16.087 に答える