0

さて、私はPHPにかなり慣れていませんが、これは私を悩ませています。変数をダンプしようとすると、「保護されたプロパティDatabase ::$databaseにアクセスできません」というメッセージが表示されます。$dbオブジェクトから$databaseにアクセスできないのはなぜですか?オブジェクトに関して、「プライベート」、「保護」、「パブリック」のキーワードを誤解していますか?

class Database
{
    protected $database;

    function __construct()
    {
        $this->database = new PDO("mysql:host=localhost;dbname=myDB", "root", "password");
    }
}
$db = new Database();
var_dump($db->database);
4

3 に答える 3

2

保護されたプロパティはクラス内(および拡張クラス...)でのみ使用できるため、クラス内のメソッドでは使用できます$this->databaseが、クラス外では、次のようにその値にアクセスするためのゲッターが必要になります。

クラスで:

public function getDB()
{
  return $this->database;
}

クラス外:

var_dump($db->getDB());
于 2012-11-30T01:06:46.647 に答える
0

以下では、「Item」=プロパティ(クラススコープ変数)またはメソッド、および「accessed」=呼び出される(メソッド)または直接使用/変更される(プロパティ)。

  • プライベートな可視性を持つアイテムは、それらが定義されているクラス内でのみアクセスできます。個人的には、それは悲しみが私的なものを使用する原因となるだけであることがわかりました。代わりに、保護されたものを使用して、実際に非公開にする正当な理由がない限り、人々がクラスを拡張してアイテムを使用できるようにします。
  • 可視性が保護されているアイテムには、それらが定義されているクラス、およびそのクラスを拡張するすべてのクラス内でのみアクセスできます(つまり、子クラスはそれを継承します)
  • 公開されているアイテムには、現在のクラス、すべての子クラス、およびオブジェクトが使用可能なスコープ内でアクセスできます。これは、可視性を指定しない場合のデフォルトですが、わかりやすくするためにとにかく指定することをお勧めします。

使用可能な範囲外のプライベートまたは保護されたプロパティにアクセスするには、パブリックゲッター/セッターメソッドを使用します。

編集:エラーが発生する理由についての質問に答えるために、使用可能なクラスの外部の保護されたプロパティでvar_dump()を呼び出しています。保護されているため、グローバルスコープでは使用できません。var_dump()をクラス内のメソッドに移動するか(内部からオブジェクトを参照する場合は$ thisを使用することを忘れないでください)、getterメソッドを使用して値を返し、次にvar_dump()を使用することができます。

于 2012-11-30T01:23:16.533 に答える
0

公開、保護、または非公開にすることができます。

例については、php マニュアルを参照してください。

http://php.net/manual/en/language.oop5.visibility.php

于 2012-11-30T01:07:01.167 に答える