PHP - 从子类访问兄弟子类

时间:2014-08-09 08:46:26

标签: php class oop methods

我有这个PHP代码:

<?php
    class A{
        public function __construct(){
            $var1=$this->B1();
            $var2=$this->C1();
            echo 'var1: '.$var1.'<br>var2: '.$var2;
        }
    }
    class B extends A{
        protected function B1(){
            return 'b1';
        }
    }
    class C extends A{
        protected function C1(){
            return 'c1';
        }
    }
    new C();
?>

显然,如果我在第4行改变:

$var1=$this->B1();

$var1=$this->C1();

我得到了这个结果:

var1: c1
var2: c1

但我想从C访问B1()并获得此结果:

var1: b1
var2: c1

并解决此错误: “致命错误:在第4行的file.php中调用未定义的方法C :: B1()。”

感谢所有

2 个答案:

答案 0 :(得分:1)

如果您想要一个不同类的行为,您应该从该类扩展。因此CC1()B1()

但是你想要C中的B行为。因此B应包含C1B1。结果类将同时具有C1()和“B1()。

现在你应该概括它们。将它们移到父类A

   class A{
        public function __construct(){
            $var1=$this->B1();
            $var2=$this->C1();
            echo 'var1: '.$var1.'<br>var2: '.$var2;
        }
        protected function B1(){
            return 'b1';
        }
        protected function C1(){
            return 'c1';
        }
    }

    class B extends A{}
    class C extends A{}

    new C();

答案 1 :(得分:0)

<?php

class C {
    protected function C1()
    {
        return 'c1';
    }
}

class B extends C 
{
    protected function B1()
    {
        return 'b1';
    }
}

class A extends B 
{
    public function __construct()
    {
        $var1=$this->B1();
        $var2=$this->C1();
        echo 'var1: '.$var1.'<br>var2: '.$var2;
    }
}

new A;

?>