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()确实是公开的。谢谢你的注意。