J'ai commencé à toucher PHP au travail.
J'ai naturellement pensé que si le champ avait un attribut protégé, il serait possible de faire référence à la classe parente de la classe petit-enfant comme en Java, mais même si je recherchais sur Google la mention de la classe petit-enfant (à moins que ma recherche ne soit mauvaise). On a beaucoup parlé des classes dérivées et des classes enfants.
Pendant ce temps, dans cet article, j'ai vu la description selon laquelle protégé ne se reflète que dans l'héritage avec une longueur d'avance en PHP, et je l'essaie réellement.
PC Windows 8.1
Java Eclipse Kepler Service Release 2 jre8
PHP XAMPP Version 7.0.24 PHP Version 7.0.24
[2018/01/28 postscript] Placez le fichier java suivant dans le package par défaut
//Classe parent
abstract class Charactor {
protected String name = "Charactor";
}
//Classe enfant
class HumanCharactor extends Charactor {
}
//Classe petit-fils
class Wizard extends HumanCharactor {
public Wizard (String name) {
this.name = name;
}
}
//Code de test
class Main {
public static void main(String[] args) {
System.out.println("Test Start...");
Wizard wiz = new Wizard("Wizard");
System.out.println(wiz.name);
HumanCharactor human = new HumanCharactor();
System.out.println(human.name);
System.out.println("Test End...");
}
}
Test Start...
Wizard
Charactor
Test End...
[Remplacement du code de contrôle de fonctionnement du 28/01/2018]
<?php
echo '<pre>';
//Classe parent
abstract class Charactor {
protected $name = "Charactor";
}
//Classe enfant
class HumanCharactor extends Charactor {
public function printName() {
var_dump($this->name);
}
}
//Classe petit-fils
class Wizard extends HumanCharactor {
public function __construct($name) {
$this->name = $name;
}
//Si vous appelez ici, Erreur fatale
//public function printName() {
// var_dump($this->name);
//}
}
//Code de test
new Test();
class Test {
public function __construct() {
var_dump("Test Start...");
$wiz = new Wizard("Wizard");
$wiz->printName();
//var_dump($wiz->name);← C'est une erreur fatale
$human = new HumanCharactor();
$human->printName();
//var_dump($human->name);← C'est une erreur fatale
var_dump("Test End...");
echo '</pre>';
}
}
?>
string(13) "Test Start..."
string(6) "Wizard"
string(9) "Charactor"
string(11) "Test End..."
[Correction de la description du 28/01/2018] Comme Java, PHP pourrait utiliser des champs protégés dans sa classe parente. Cependant, contrairement à Java, PHP ne semble pas être capable de référencer le champ parent du parent directement à partir d'une instance de la classe petit-enfant.
Recommended Posts