Warum kann ich nicht überschreiben diese geschützte Funktion in PHP?
Dies ist wohl eine grundsätzliche Frage, aber ich bin nach diesem tutorial und an einer Stelle der code sieht ungefähr so aus.
<?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;
}
}
Jedoch wenn ich diese
<?php include "class_lib.php";?>
</head>
<body id="theBody">
<div>
<?php
$maria = new person("Default");
$dave = new employee("David Knowler");
echo $dave->get_name();
?>
bekomme ich diesen Fehler
Fatal error: Call to protected-Methode Mitarbeiter::get_name() aus
Kontext " in C:\Users\danny\Documents\Workspace\test\index.php auf
Zeile 13
Scheint das problem zu sein, wenn ich hinzufügen geschützt get_name () - Funktion in der Mitarbeiter-Klasse, aber es scheint mir, dass dies ist die bevorzugte Methode zum überschreiben in der Anleitung. Irgendwelche Ideen?
geschützte Methoden können nicht aufgerufen werden, außerhalb der Klasse
InformationsquelleAutor lorless | 2013-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Scheint das problem zu sein, wenn ich hinzufügen
protected
zu denget_name()
Funktion in der Mitarbeiter-Klasse" - das ist Ihre Antwort. Eine protected-Methode kann nur aufgerufen werden, aus der gleichen Klasse oder Unterklassen, die nicht "von außen". Ihre Methode muss öffentlich sein, wenn Sie wollen, es zu benutzen auf diese Weise.InformationsquelleAutor Waldheinz
Das problem ist nicht, dass Sie nicht überschreiben die protected-Methode ist es, dass Sie anrufen, eine geschützte Methode von außerhalb der Klasse.
Nachdem die Klasse instanziiert ist, können Sie rufen Sie eine öffentliche Methode, die in der turn nennen könnte
get_name()
und Sie werden sehen, dass der code funktioniert wie erwartet.Beispiel:
In deinem Beispiel würden Sie wohl am besten machen
get_name()
öffentlichkeit.InformationsquelleAutor acairns
Können Sie den Zugriff get_name() innerhalb der Klasse "person" oder employee-Klasse nicht von außerhalb dieser beiden Klassen.
check geschützt Sichtbarkeit
http://php.net/manual/en/language.oop5.visibility.php
InformationsquelleAutor ghmulchandani