1

標準の OOP では、基本クラスのメソッドから具象クラスのプライベート メンバーにアクセスできると断言できました。PHPはこれを別の方法で実装しているだけですか、それとも何か間違ったことをしていますか、それとも私の理解が完全に間違っていましたか?

<?php

class Base {
  public function __toString() {
    return $this->name;
  }
}

class Concrete extends Base {
  private $name;

  public function __construct($name) {
    $this->name = $name;
  }
}

$o = new Concrete('foobar');
echo $o;

上記のコード フラグメントは、 をスローしFatal error: Cannot access private property Concrete::$name on line 5ます。のアクセスレベルを に変更すると機能$nameしますprotected

デモ

4

3 に答える 3

3

private は通常、クラス内からのみアクセスできることを意味します。これは期待される動作だと思います。

PHP-Docs から:

プロパティまたはメソッドの可視性は、宣言の前にキーワード public、protected、または private を付けることで定義できます。public と宣言されたクラス メンバーは、どこからでもアクセスできます。保護されていると宣言されたメンバーは、クラス自体内で、継承されたクラスおよび親クラスによってのみアクセスできます。private として宣言されたメンバーには、そのメンバーを定義するクラスのみがアクセスできます。

于 2013-07-19T07:13:02.587 に答える
1

これが、プライベートとプロテクトの違いです。私だけがプライベート変数を見ることができますが、私の家族は保護されたものを見ることができます。

于 2013-07-19T07:12:54.400 に答える