在PHP中,为什么子对象不能从其父对象访问继承的函数?

在PHP中,为什么子对象不能从其父对象访问继承的函数?,php,inheritance,Php,Inheritance,我已经为我的类创建了一个非常基本的类型,正如问题中提到的,为什么子对象不能从其父对象访问继承的函数?我添加了一个新字段和新构造函数显示参数()是在父类中定义的,但我不能在子类中使用它 <?php class Test { private $age; private $fname; private $lname; public function __construct($age,$fname,$lname)

我已经为我的类创建了一个非常基本的类型,正如问题中提到的,为什么子对象不能从其父对象访问继承的函数?我添加了一个新字段和新构造函数<代码>显示参数()是在父类中定义的,但我不能在子类中使用它

<?php
    class Test {
        private $age;
        private $fname;
        private $lname;

        public function __construct($age,$fname,$lname)
        {
            $this->age = $age;
            $this->fname = $fname;
            $this->lname = $lname;
            echo "A new constructor in " . __CLASS__ . ".<br />";
        }

        public function __destruct()
        {
            echo 'The class "', __CLASS__, '" was destroyed.<br />';
        }

        public function set_age($age)
        {
            $this->age = $age;
        }

        public function get_age()
        {
            return $this->age;
        }

        public function __toString()
        {
            return $this->fname." ".$this->lname;
        }

        public function show_param()
        {
            echo $this->age."<br />";
            echo $this->fname."<br />";
            echo $this->lname."<br />";
        }
    }

    //Child definition


    class T1 extends Test
    {
        private $level;
        public function __construct($age,$fname,$lname,$level)
        {
            $this->level = $level;
            $this->age = $age;
            $this->fname = $fname;
            $this->lname = $lname;
            echo "A child constructor in " . __CLASS__ . ".<br />";

        }
        public function get_level()
        {
            return $this->level;
        }
        public function set_level($level)
        {
            $this->level= $level;
        }

    }

    $a = new T1(23,"Bernard","Grey","Under");

    echo $a->show_param();

?>

结果:

T1中的子构造函数。 T1中的子构造函数

类“测试”被销毁。 类“测试”被销毁

预期:

T1中的子构造函数。 T1中的子构造函数。 伯纳德 灰色 23 类“测试”被销毁。
类“Test”已销毁。

在类T1中使用父类的构造函数:

class T1 extends Test
    {
        private $level;
        public function __construct($age,$fname,$lname,$level)
        {
            parent::__construct($age,$fname,$lname);
            $this->level = $level;
            echo "A child constructor in " . __CLASS__ . ".<br />";

        }
        public function get_level()
        {
            return $this->level;
        }
        public function set_level($level)
        {
            $this->level= $level;
        }

    }
T1类扩展测试
{
私人部门$水平;
公共函数构造($age、$fname、$lname、$level)
{
父项::_构造($age、$fname、$lname);
$this->level=$level;
echo“类中的子构造函数”
; } 公共功能获取_级别() { 返回$this->level; } 公共功能集\u级别($level) { $this->level=$level; } }
您得到的结果是什么?你希望得到什么样的结果呢?你已经为年龄、姓名等创建了setter,但是您没有在T1构造函数中调用它们。您不能通过继承访问
私有
数据成员。您应该将其更改为
公共/受保护
@bobfleming我实际上是在调用这些数据,但它们对父级是私有的,因为@Jitendra说我应该将它们更改为受保护的,或者在子级中使用父级构造函数构造函数。我认为最好使用父类set_age(),然后为其他父类属性添加setter。@KA_lin我认为另一个选项是使父类中的变量受保护。然而,这也是可行的。。。