Accéder aux champs protégés des petits-enfants (Java / PHP)

Origine

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.

environnement

PC Windows 8.1

Java Eclipse Kepler Service Release 2 jre8

PHP XAMPP Version 7.0.24 PHP Version 7.0.24

Opération confirmée avec Java

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

résultat

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

Opération confirmée avec PHP

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

résultat

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

Résumé

[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

Accéder aux champs protégés des petits-enfants (Java / PHP)
Accédez à API.AI depuis Java
Accéder à Teradata depuis une application Java
Java protégé
De l'installation d'Eclipse à l'exécution de Java (PHP)
Si une personne de Java apprend PHP
Modificateur d'accès [Java]
Accédez à Forec.com depuis Java en utilisant Axis2 Enterprise WSDL
Exécuter Rust depuis Java avec JNA (Java Native Access)
Les débutants en programmation apprennent PHP à partir d'une perspective Java-variables-
Développement de serveur Minecraft BE de PHP à Java
Comment accéder aux méthodes et champs Java Private
Générer des modèles de JSON à Swift, PHP, C #, JAVA
Appeler Java depuis JRuby
Changements de Java 8 à Java 11
Somme de Java_1 à 100
Évaluer la source Java à partir de Java
À propos des modificateurs d'accès Java
[JDBC] J'ai essayé d'accéder à la base de données SQLite3 depuis Java.