在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我认为另一个选项是使父类中的变量受保护。然而,这也是可行的。。。