Pourquoi ne puis-je remplacer cette fonction protégée en PHP?
C'est probablement une question de base, mais im suivant ce tutoriel et à un moment, le code ressemble à ceci.
<?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;
}
}
Cependant quand j'utilise ce
<?php include "class_lib.php";?>
</head>
<body id="theBody">
<div>
<?php
$maria = new person("Default");
$dave = new employee("David Knowler");
echo $dave->get_name();
?>
j'obtiens cette erreur
Erreur fatale: Appel à la méthode protégée de l'employé::get_name() à partir de
contexte " dans C:\Users\danny\Documents\Workspace\test\index.php sur
ligne 13
Le problème semble être quand j'ajoute protégé à l'get_name() dans la classe d'employés, mais il me semble que c'est la meilleure façon de remplacer dans le tutoriel. Des idées?
- protégé méthodes ne peuvent pas être appelées à l'extérieur de la classe
Vous devez vous connecter pour publier un commentaire.
"Le problème semble être quand j'ajoute
protected
à laget_name()
fonction de la classe d'employés" -- c'est votre réponse. Une méthode protégée ne peut être appelé à partir de la même catégorie ou sous-classes, et non pas "de l'extérieur". Votre méthode doit être publique si vous souhaitez l'utiliser de cette façon.Le problème n'est pas que vous ne pouvez pas remplacer la méthode protégée, c'est que vous appelez une méthode protégée de l'extérieur de la classe.
Après la classe est instanciée, vous pouvez appeler une méthode publique qui à son tour pourrait appeler
get_name()
et vous verrez que le code fonctionne comme prévu.Par exemple:
Dans votre exemple, vous serait probablement mieux faire
get_name()
public.Vous pouvez accéder à get_name() dans la classe personne ou d'un employé de la classe et non à l'extérieur de ces deux classes.
vérifier protégé visibilité
http://php.net/manual/en/language.oop5.visibility.php