Php 继承和函数调用父类和子类

Php 继承和函数调用父类和子类,php,inheritance,Php,Inheritance,我遇到了以下结构: // parent class class A { public function myFunc1() { $this->myFunc2(); } private function myFunc2() { echo "called from class A"; } } // sub-class class B extends A { private funct

我遇到了以下结构:

// parent class
class A 
{       
    public function myFunc1()
    {
        $this->myFunc2();
    }

    private function myFunc2() 
    {
        echo "called from class A";
    }
}

// sub-class
class B extends A
{ 
    private function myFunc2() 
    {
        echo "called from class B";
    }
}

$foo = new B();
$foo->myFunc1();
由于类B中没有myFunc1(),我希望调用父函数。这似乎是正确的

现在,为了安全起见,我在myFunc1()中使用了
var\u dump
$this,它显示这是类型B中的一个对象

根据我的理解,它应该从类B调用myFunc2(),但这并没有发生。它正在从类A调用该方法

从A班打过来的

而不是

从B班呼叫


是的,这些功能是私有的,如果我将其更改为受保护的,它将按预期工作。但是private意味着,当我在特定的上下文中时,我可以访问这个函数,不是吗?

private
总是属于同一个类,您不能继承它。这就是为什么
myFunc1()
从类
A
调用
myFunc2()
。如果要覆盖它,必须将可见性更改为
受保护

私有函数仅在定义它们的类中可用,而不在子类中可用

这意味着您的对象有两个完全不同的函数,它们恰好具有相同的名称。对象B知道拥有其中一个,而对象A只知道拥有另一个。他们不以任何方式互动

由于这些函数对于定义它们的特定类是完全私有的,因此无法重写它们,也无法让任何其他类调用它们


如果您需要允许重写类工作方式的行为,则必须改用protected,它专门设计为可从扩展调用和可更改(因此是完全不同的beast)。

此代码应该失败。无法对对象调用私有方法。只能从内部访问。只能从类本身内部访问私有函数,该类的子类只能访问其父类的公共或受保护函数。请想想编写代码的人。当她编写
myFunc1
时,她知道该类
myFunc2
存在一个私有类,并期望该类就是要调用的类。@Erik,你是对的,在那里犯了一个错误。myFnc1()确实是公开的。谢谢你的注意。