Garip davranış özel yöntemleri geçersiz zaman

0 Cevap php

Aşağıdaki kod parçasını düşünün:

class foo {
    private function m() {
        echo 'foo->m() ';
    }
    public function call() {
        $this->m();
    }
}

class bar extends foo {
    private function m() {
        echo 'bar->m() ';
    }
    public function callbar() {
        $this->m();
    }
}

$bar = new bar;

$bar->call();
$bar->callbar();

Now, changing the visibility of the m() method, I get:
(+ for public, - for private)

Visibility              bar->call()    bar->callbar() 
======================================================
-foo->m(), -bar->m()    foo->m()       bar->m()
-foo->m(), +bar->m()    foo->m()       bar->m()
+foo->m(), -bar->m()    ERROR          ERROR
+foo->m(), +bar->m()    bar->m()       bar->m()

(protected gibi davranmaya görünüyor public).

Her iki beyan zaman yaptığı gibi her şeyi davranmaya bekliyordum public. Ama foo->call() ve bar->callbar() aslında aynı şey olmasına rağmen, onlar m() foo ve {[görünürlüğü bağlı olarak farklı sonuçlar elde (5)]}. Bu neden olur?

0 Cevap