2010-12-14 12 views
2

PHPの派生クラスで関数のアクセスレベルを下げる可能性はありますか?派生クラスの関数のアクセスレベルを下げる

例は

class foo 
{ 
    public function myFunction() { ... } 
    public function myOtherFunction() { ... } 
} 

class bar extends foo 
{ 
    private function myFunction() { ... } 
} 

は、今私はMyFuncイオンbarオブジェクトを呼び出すことができshould'nt(...は、より多くのコードを意味します)。しかし、このようにすることは、PHPでは有効ではないようです。その他の方法で?私は空の関数を実装することができますが、私はインターフェイスに関数を公開したくないと思います。

答えて

4

とにかくOOPでは有効ではありません。パブリックメソッドを実装する場合は、このクラスとすべての子がこの機能を提供することを約束します。パブリックメソッドを削除するとは、あなたの約束を破ることを意味します;)すべてのパブリックメソッドとプロパティがクラスのインターフェイスを定義し、インターフェイスを破棄することは決して良い考えではないためです。

あなたが何をしようとしているかについての明確な情報がなければ、「サポートされていません」のような例外をスローすることをお勧めします。

+0

私は、registerObject()という名前の関数を持つ抽象クラスを持っていて、これを拡張して、実際にはparent :: registerObject()を呼び出すregisterForm()という関数を持っていますが、問題のオブジェクトのより適切な名前。しかし、私はそれを考えると悪い習慣です:)...私はおそらく保護された関数registerObject()を作成し、次にpublicクラスのregisterForm()を派生クラス内に置くべきです。 – inquam

+0

クラスOurExceptionがExceptionを継承しています。 OurExceptionのインスタンスを作成する2つの方法があります。 PHPは__constructをうまく過負荷にすることができないため、2つの静的メソッドを作成したいと考えています。 OurException :: newAとOurException :: newB(これは私の研究から、これはかなり標準的な方法でオーバーロードされます)。しかし、私たちは、 "new OurException"を使用している人に__constructを保護または非公開にしたいと考えていません。これは、例外__constructがpublicであるため不可能です。 – Pancho

+0

...続きます。残念ながら、例外がスローされているときに、例外が「サポートされていません」をスローすることは、われわれのコンテキストでは意味をなさない。 PHPがコンストラクタに確実に過負荷をかけることができれば、上記のOOP「約束」を遵守することはずっと意味をなさないでしょう。しかし、クリーンなオーバーロードがなければ、「__constructへのアクセシビリティを減らす」ことができないということは、私たちの状況では非常に問題になります...そして、私は本当に問題を回避する方法がわかりません。 – Pancho

関連する問題