ramboRam
ramboRam

Reputation: 1

why php allow to overwriting private method?

In the documentation is this example and understand it without problems

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(); 

The result is:

But now redefine the test () method in the class foo

 class Bar{
    public function test() {
        echo '<br>Im Bar::test';
        $this->testPrivate();
        $this->testPublic();
    }
    public function testPublic() {
        echo "<br>Bar::testPublic\n";
    }
    private function testPrivate() {
        echo "<br>Bar::testPrivate\n";
    }
}
class Foo extends Bar{
    public function test() {
        echo '<br>Im Foo::test';
        $this->testPrivate();
        $this->testPublic();
    }
    public function testPublic() {
        echo "<br>Foo::testPublic\n";
    }
    private function testPrivate() {
        echo "<br>Foo::testPrivate\n";
    }
}
$myFoo = new Foo();
$myFoo->test(); 

The result is:

php allows me to override the private method testPrivate (), Why?

Upvotes: 0

Views: 1337

Answers (1)

Scopey
Scopey

Reputation: 6319

Why not? It's difficult to answer that question as it's just how PHP works. If you want to prohibit your methods from being overwritten then you can use the final keyword.

Additionally, in your example, if you do not declare the private method within Foo, you will get an error as Foo technically has no definition for that method. Extending classes have no visibility of any private properties or methods within their parent class.

Upvotes: 1

Related Questions