Zugriff auf geschützte Felder von Enkelkindern (Java / PHP)

Ursprung

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.

Umgebung

PC Windows 8.1

Java Eclipse Kepler Service Release 2 jre8

PHP XAMPP Version 7.0.24 PHP Version 7.0.24

Bestätigter Betrieb mit Java

[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...");
    }
}

Ergebnis

Test Start...
Wizard
Charactor
Test End...

Bestätigter Betrieb mit PHP

[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>';
    }
}
?>

Ergebnis

string(13) "Test Start..."
string(6) "Wizard"
string(9) "Charactor"
string(11) "Test End..."

Zusammenfassung

[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

Zugriff auf geschützte Felder von Enkelkindern (Java / PHP)
Greifen Sie über Java auf API.AI zu
Greifen Sie über eine Java-Anwendung auf Teradata zu
Java geschützt
Von der Installation von Eclipse bis zur Ausführung von Java (PHP)
Wenn eine Person aus Java PHP lernt
Zugriffsmodifikator [Java]
Greifen Sie über Java mit Axis2 Enterprise WSDL auf Forec.com zu
Führen Sie Rust von Java mit JNA (Java Native Access) aus.
Programmieranfänger lernen PHP aus einer Java-Perspektive.
Minecraft BE Serverentwicklung von PHP nach Java
So greifen Sie auf Java Private-Methoden und -Felder zu
Generieren Sie Modelle von JSON zu Swift, PHP, C #, JAVA
Rufen Sie Java von JRuby aus auf
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Eval Java-Quelle von Java
Informationen zu Java-Zugriffsmodifikatoren
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.