3


2

私はオブジェクト指向とクラスについて学んでいます、PHPのオブジェクト指向とクラスについていくつか質問があります。

  1. 私が理解しているように、他のクラスを拡張するクラスは単に、他のクラスを拡張するクラスがそれが拡張しているクラスの変数/プロパティおよび関数/メソッドにアクセスできることを意味します。 これは正しいです?

  2. 静的なメソッドやプロパティは、基本的にはクラスの外側の手続き型関数や変数と同じであり、ほとんどどこでも使用できることを私は知っています。 これは正しいです?

  3. Publicは任意のクラスがそれにアクセスできることを意味し、Privateはカプセル化されているクラスまたは所有者から拡張されたクラスだけがアクセスして使用できることを意味します。 これは正しいです?

3 Answer


11


1)はい、その通りです。 子クラスは、その親の protected`または public`プロパティとメソッドを継承します。 「非公開」と宣言されたものはすべて使用できません。

2)これは本当です。 クラスがロードされている限り(これは以前からのオートロードの質問によく合います)、スコープ解決演算子(::)を介して静的メソッドにアクセスすることができます。 `ClassName

methodName();`

3)あなたは正しい public`の意味を持っています、しかし先に述べたように、 private`メソッドはそれらが宣言されたクラスによってのみ使用することができます。

クラスparentClass {プライベート$ x; public $ y; }

childClassクラスはparentClassクラスを継承します。{public function __construct(){echo $ this-> x;} }}

$ z = new childClass();

上記のコードでは、$ xはchildClassからアクセスできないため、 `NOTICE`エラーが発生します。

__通知:未定義のプロパティ:childClass

$ x __

もし$ xが代わりに protected`と宣言されていたら、 childClass`はアクセス権を持ちます。 編集: protected`として宣言されたプロパティは、それを宣言したクラスとそれを拡張するすべての子クラスとによってアクセス可能ですが、それ以外の場合「外界」にはアクセスできません。 それは `public`と private`の間の良い中間です。


0


1の場合 私が理解しているように、他のクラスを拡張するクラスは単に、他のクラスを拡張するクラスがそれが拡張しているクラスの変数/プロパティおよび関数/メソッドにアクセスできることを意味します。 これは正しいです?

  • ANS:*それは正しいですがそれだけではありません。 拡張クラスは、拡張クラスのメソッドをオーバーライドすることによって拡張クラスをカスタマイズすることもできます。 そしてもちろん、新しいフィールドやメソッドを追加することでスーパークラスの機能を拡張することもできます。

2の場合 静的なメソッドやプロパティは、基本的にはクラスの外側の手続き型関数や変数と同じであり、ほとんどどこでも使用できることを私は知っています。 これは正しいです?

  • ANS:*はい。クラスがパブリックでロードされていて、プロパティとメソッドがパブリックである限り、それは正しく、ゾンバットが言ったとおりです。 言い換えれば、あなたはそれらの要素の名前空間としてクラスを使用しています。

3の場合 Publicは任意のクラスがそれにアクセスできることを意味し、Privateはカプセル化されているクラスまたは所有者から拡張されたクラスだけがアクセスして使用できることを意味します。 これは正しいです?

  • ANS:*それを物理的特性と考えてください。公共のコンピュータ(図書館)は誰でも使用でき、あなたのプライベートコンピュータは(おそらく)あなただけが使用できます。

Zambatのコメントに追加するだけです。


-2


一般的な規則として代わりにprotectedを使用するので、プライベートなものを宣言する必要はほとんどありません。