php类继承的问题

WBOY
Release: 2016-06-06 20:17:33
Original
1414 people have browsed it

<code>class A
{
    public function run()
    {
        $this->say();
    }
}

class B extends A
{
    protected function say()
    {
        echo 'B-say';
    }
}

$b = new B();
$b->run();
//结果 输出B-say</code>
Copy after login
Copy after login

如果把say换成private就不行了

报错 PHP Fatal error: Call to private method B::say() from context 'A'

意思是A访问不了B的私有方法。那为什么protected就行呢,protected不应该也不行的吗?A是B的父类并不是子类。

回复内容:

<code>class A
{
    public function run()
    {
        $this->say();
    }
}

class B extends A
{
    protected function say()
    {
        echo 'B-say';
    }
}

$b = new B();
$b->run();
//结果 输出B-say</code>
Copy after login
Copy after login

如果把say换成private就不行了

报错 PHP Fatal error: Call to private method B::say() from context 'A'

意思是A访问不了B的私有方法。那为什么protected就行呢,protected不应该也不行的吗?A是B的父类并不是子类。

自己找到问题所在了。父类可以访问子类 protected 受保护的方法

this代表的是对象本身。因为B继承A,所以B也有了A的所有方法和属性。代码不就变成这样了吗。

<code>class B extends A
{
    protected function say()
    {
        echo 'B-say';
    }
    
    public function run()
    {
        $this->say();
    }
}</code>
Copy after login

这样执行的结果肯定也是B-say;
如果say方法的修饰词换成是private的话,那肯定是不可以在外部调用say方法的,所以会报错。

访问修饰符

private 只能在本类中访问,继承类之间不可访问
protected 继承类之间是可以访问的,类外不可访问

这就是private 和 protect的区别

觉得挺有意思的,分析了一下,看下这里:
http://www.chengxiaobai.cn/PHP/the-parent-class-calls-the-sub-class-method-in-php.html

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template