Ich fing an, PHP bei der Arbeit zu berühren.
Ich dachte natürlich, wenn das Feld ein geschütztes Attribut hätte, wäre es möglich, auf die Elternklasse aus der Enkelklasse wie in Java zu verweisen, aber selbst wenn ich die Erwähnung der Enkelklasse googelte (es sei denn, meine Forschung war schlecht). Es wurde viel über abgeleitete Klassen und Kinderklassen gesprochen.
In diesem Beitrag habe ich die Beschreibung gesehen, dass sich protected nur in der Vererbung widerspiegelt, die in PHP einen Schritt voraus ist, und habe es tatsächlich versucht.
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] Platzieren Sie die folgende Java-Datei im Standardpaket
//Übergeordnete Klasse
abstract class Charactor {
protected String name = "Charactor";
}
//Kinderklasse
class HumanCharactor extends Charactor {
}
//Enkelklasse
class Wizard extends HumanCharactor {
public Wizard (String name) {
this.name = name;
}
}
//Testcode
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...
[Austausch des Betriebsprüfcodes 2018/01/28]
<?php
echo '<pre>';
//Übergeordnete Klasse
abstract class Charactor {
protected $name = "Charactor";
}
//Kinderklasse
class HumanCharactor extends Charactor {
public function printName() {
var_dump($this->name);
}
}
//Enkelklasse
class Wizard extends HumanCharactor {
public function __construct($name) {
$this->name = $name;
}
//Wenn Sie hier anrufen, schwerwiegender Fehler
//public function printName() {
// var_dump($this->name);
//}
}
//Testcode
new Test();
class Test {
public function __construct() {
var_dump("Test Start...");
$wiz = new Wizard("Wizard");
$wiz->printName();
//var_dump($wiz->name);← Dies ist ein schwerwiegender Fehler
$human = new HumanCharactor();
$human->printName();
//var_dump($human->name);← Dies ist ein schwerwiegender Fehler
var_dump("Test End...");
echo '</pre>';
}
}
?>
string(13) "Test Start..."
string(6) "Wizard"
string(9) "Charactor"
string(11) "Test End..."
[Beschreibungskorrektur 2018/01/28] Wie Java könnte PHP geschützte Felder in seiner übergeordneten Klasse verwenden. Im Gegensatz zu Java scheint PHP jedoch nicht in der Lage zu sein, das übergeordnete Feld des übergeordneten Elements direkt aus einer Instanz der Enkelkindklasse zu referenzieren.
Recommended Posts