2017-11-07 6 views
1

私はこの質問をする方法を知らないので、タイトルがそうではありません。誰もができれば良い..私はそれがFoo::testPrivateFoo::testPublicを印刷しますと思っどのよう$myFoo->test()プリントBar::testPrivateFoo::testPublic 上記のコードでphp oop visibility:親クラスの関数がそれ自身の私的関数と子クラスの公開関数を呼び出す方法

それはメソッドの可視性の下でPHPドキュメント http://php.net/manual/en/language.oop5.visibility.phpである

<?php 

class Bar 
{ 
    public function test() { 
     $this->testPrivate(); 
     $this->testPublic(); 
    } 

    public function testPublic() { 
     echo "Bar::testPublic\n"; 
    } 

    private function testPrivate() { 
     echo "Bar::testPrivate\n"; 
    } 
} 

class Foo extends Bar 
{ 
    public function testPublic() { 
     echo "Foo::testPublic\n"; 
    } 

    private function testPrivate() { 
     echo "Foo::testPrivate\n"; 
    } 
} 

$myFoo = new Foo(); 
$myFoo->test(); // Bar::testPrivate 
       // Foo::testPublic 
?> 

を変更してください

答えて

4

privateメソッドやプロパティにのみアクセスすることができますBar::testPrivateは、Barからのみ呼び出すことができます。その意味は、privateを意味します。逆に、Foo::testPrivateは、文字通りFooクラス定義内のコードからのみ呼び出すことができます。

Bar::testBarにあるので、Foo::testPrivateを呼び出すことはできません。呼び出し可能な唯一の実装はBar::testPrivateです。ただし、publicメソッドにはこのような制限はなく、子クラスのオーバーライドされたメソッドが呼び出されます。

あなたはFootest方法をオーバーライドした場合、状況は逆になります。

class Foo extends Bar { 
    public function test() { 
     $this->testPrivate(); 
     $this->testPublic(); 
    } 

    ... 
} 

を今すぐコードがFoo内文字通りであり、唯一のFoo::testPrivateを呼び出すことができます。

0

プライベート=このクラスから作成され、外部には表示されないオブジェクト

すべてのクラスとオブジェクトに=目に見える保護されたが、このクラスから継承されたが、外の世界には見えません(あなたが探しているもの)

見え公開=どこでも

関連する問題