2

2つのクラスがあるとしましょう

class BaseClass {
   ...
}

class SomeClass extends BaseClass {

}

ここで、SomeClass のみを拡張し、BaseClass からは何も取得しない 3 番目のクラスを作成したいと考えています。それは可能ですか?

Webdriver を使用して Selenium テストを作成しており、Selenium からのデータを DB または WebServices に対してチェックしたいのですが、フレームワーク全体をロードするのではなく、ライブラリの一部だけをロードしたくありません

4

3 に答える 3

6

できません。それは継承の仕組みではありません。SomeClass を継承するクラスは、BaseClass から継承された SomeClass のプロパティとメソッドを含め、常にすべてのプロパティとメソッドを継承します。可視性を介してアクセスを制限できますが、保護されているプラ​​イベートからパブリックにのみ制限できます。たとえば、可視性を失うことはできますが、強化することはできません。

継承と可視性に関する PHP マニュアルの章を参照してください。


もう 1 つのオプションは、SomeClass のインスタンスの周りにある種の Facade を使用して、SomeClass でアクセス可能なプロパティとメソッドへのアクセスを制御することです。

class LimitedAccess
{
     private $instance;

     public function __construct(SomeClass $someClass)
     {
          $this->instance = $someClass
     }

     public function foo()
     {
         return $this->instance->foo;
     }
}

そして、この Facade を介してすべてのアクセスをファネルし、BaseClass::bar() へのアクセスを効果的に防ぐことができます。これにより、継承階層が変更されることはありません。アクセスを制御するだけです。

于 2012-10-25T08:23:30.063 に答える
2

人間として考えてみてください... あなたには母親がいて、彼女には母親がいます... あなたは祖母の孫でなければ、母親の息子にはなれません..

PHPでも同じです

クラスが他のそのAWAYSの子を拡張するとき...

于 2012-10-25T08:34:29.950 に答える
0

クラスからの呼び出しを制限したいPROTECTEDメソッドにアクセス修飾子を付ければ、間違いなくそれを行うことができます..BaseClassThird

于 2012-10-25T11:44:25.977 に答える