这可能是一个基本问题,但我遵循本教程,并且在某一时刻代码看起来像这样。
<?php
class person
{
public $name;
public $height;
protected $social_security_no;
private $pin_number = 3242;
public function __construct($person_name)
{
$this->name = $person_name;
}
public function set_name($new_name)
{
$this->name = $new_name;
}
protected function get_name()
{
return $this->name;
}
public function get_pin_number_public()
{
$this->pub_pin = $this->get_pin_number();
return $this->pub_pin;
}
private function get_pin_number()
{
return $this->pin_number;
}
}
class employee extends person
{
public function __construct($person_name)
{
$this->name = $person_name;
}
protected function get_name()
{
return $this->name;
}
}
然而,当我使用这个
时<?php include "class_lib.php";?>
</head>
<body id="theBody">
<div>
<?php
$maria = new person("Default");
$dave = new employee("David Knowler");
echo $dave->get_name();
?>
我收到此错误
致命错误:从中调用受保护方法employee :: get_name() 上下文''在C:\ Users \ danny \ Documents \ Workspace \ test \ index.php上 第13行
问题似乎是当我向employee类中的get_name()函数添加protected时,但在我看来,这是在教程中覆盖的首选方法。有什么想法吗?
答案 0 :(得分:2)
“问题似乎是当我将protected
添加到员工类中的get_name()
函数时” - 这是您的答案。受保护的方法只能从同一个类或子类调用,而不能“从外部”调用。如果你想以这种方式使用它,你的方法必须是公开的。
答案 1 :(得分:2)
问题不在于您无法覆盖受保护的方法,而是您从类外部调用受保护的方法。
在实例化类之后,您可以调用一个公共方法,然后调用get_name()
,您将看到代码将按预期工作。
例如:
class employee extends person {
function __construct($person_name){
$this->name = $person_name;
}
protected function get_name() {
return $this->name;
}
public function name()
{
return $this->get_name();
}
}
$dave = new employee("David Knowler");
echo $dave->name();
在您的示例中,您可能最好将get_name()
公开。
答案 2 :(得分:1)