为什么子对象无法从PHP中的父对象访问继承的函数?

时间:2014-05-27 10:44:50

标签: php inheritance

我已经创建了一个非常基本类型的类,如上所述,为什么子对象无法从其父对象访问继承的函数?我添加了一个新字段和新构造函数。 show_param()在父类中定义但我不能在子类中使用它?!

<?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 “测试”课程被摧毁。 “测试”课程被摧毁。

1 个答案:

答案 0 :(得分:2)

在T1类中使用parent`s构造函数:

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;
        }

    }