繁体   English   中英

PHP继承方法引用

[英]PHP inhertience method referencing

<?php
class A {
    private function foo() {
        echo "baf!<br/>";
    }
    public function test() {
        $this->foo();

    }
}


class C extends A {
    private function foo() {
        echo "bar!<br/>";
    }

}

$c = new C();
$c->test();  //Prints baf!
?> 

如何使c->test()打印栏! 我期望foo()将在C被覆盖并打印出bar! 有人可以向我解释吗?

通过同时保护这两种方法,您将获得所需的结果。 原因是在A::test() ,由于private可见性,它只能将$this->foo()解析$this->foo() A::foo() 请参阅可见性

class A {
    protected function foo() {
        echo "baf!<br/>";
    }
    public function test() {
        $this->foo();

    }
}


class C extends A {
    protected function foo() {
        echo "bar!<br/>";
    }

}

$c = new C();
$c->test();  //Prints bar!
class A {
    protected function foo() {
        echo "baf!<br/>";
    }
    public function test() {
        $this->foo();

    }
}


class C extends A {
    protected function foo() {
        echo "bar!<br/>";
    }

}
$c = new C();
$c->test();  //Prints baf!

只需将foo函数设置为公共或受保护的访问级别即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM