1

以下のコードをご覧ください。

<?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
?> 

上記の例ではof$myFoo->test();と呼んでいましたが、なぜofクラス と呼んでいるのでしょうか。testPrivateBar classtestPublicFoo

誰でもこれで私を助けることができますか?

4

3 に答える 3

0

Bar.testPrivateFoo.testPrivateプライベートなメソッドではなく、保護されたメソッドでなければなりません。詳細については、こちらを参照してください。

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

于 2012-06-13T18:24:17.257 に答える
0

実際、可視性ページのコメントの 1 つがこれを繰り返しています。

「これらのメソッドは子クラスでは表示されないため、プライベート メソッドはオーバーライドに参加しません。」

子クラスが同じメソッド名で親をオーバーライドすると思うので、少し奇妙に感じますが、プライベート メソッドの場合はそうではなく、ここでは親メソッドが優先されるため、保護されたメソッドを使用するのが最善です。オーバーライドしたい。

于 2012-06-17T11:27:52.443 に答える
0

test() は Foo ではなく、Bar スコープで実行されているためです。Bar スコープは Foo プライベート メソッドにアクセスできません。test() を Foo に追加するだけです...

于 2012-06-17T09:58:36.870 に答える