Je viens d'un arrière-plan Java, et je veux utiliser une classe interne en php. Cependant, chaque fois que je mets la classe interne, j'obtiens une erreur de syntaxe. Est-ce possible avec PHP? , comment référencer la classe externe? Est-ce que j'ai accès à TOUS ses membres de données?
<?php
class OuterClass {
var $x = 15;
function __construct() {
}
class InnerClass { // error when InnerClass is static
function __construct() { // error when InnerClass is static
echo $x;
}
}
}
?>
Ceci est utilisé pour une MoveClass (comme pour faire un mouvement) d'un jeu de cartes spécifique. Je pense que ce serait une bonne idée de mettre ces classes ensemble car elles n'ont aucun sens. En outre, la MoveClass doit connaître certains membres de données de la classe Game. Pourquoi ne pas en faire une fonction? C'est tout simplement trop grand.
Éditer:
Qu'en est-il des classes imbriquées? D'après ce que je comprends, ceux-ci doivent être statiques? O_o
PHP ne permet pas les classes internes. Si vous souhaitez accéder à tous les membres de données de la classe parent, je vous suggère d'utiliser l'héritage.
Une alternative possible:
class OuterClass {
var $x = 15;
function __construct() {
}
}
class ChildClass extends OuterClass {
function __construct() {
parent::__construct();
}
}
Vous pouvez invoquer une méthode de la classe parente en vous référant à la classe elle-même; Dans PHP vous pouvez le faire avec le mot clé parent
. Donc, pour faire référence à une méthode dans le contexte d'une classe plutôt qu'à un objet que nous utilisons ::
par opposition à ->
.
dans PHP 5.4 ou version ultérieure, vous pouvez utiliser PHP Traits qui sont davantage conçus pour l'héritage multiple, mais peuvent répondre à vos besoins. À partir du PHP:
Un trait est similaire à une classe, mais uniquement destiné à regrouper les fonctionnalités de manière fine et cohérente. Il n'est pas possible d'instancier un trait seul. C'est un ajout à l'héritage traditionnel et permet une composition horizontale du comportement; c'est-à-dire l'application des membres de la classe sans exiger d'héritage.
Comme mentionné dans les commentaires à cette réponse de ne autre question , la version PHP de cette fonctionnalité a été ajoutée dans PHP 7. Il ne semble pas fournir exactement ce que vous demandez, mais il devrait vous fournir un modèle de conception similaire.
Voici le RFC décrivant comment cela fonctionne: https://wiki.php.net/rfc/anonymous_classes
Comme mentionné dans les commentaires de l'autre réponse, recherchez dans la page RFC "imbriqué" pour voir un exemple d'imbrication à l'intérieur d'une classe externe.
Vous voudrez peut-être utiliser une stdClass à la place. Voici une SO question à ce sujet: Qu'est-ce que stdClass en PHP?
Vous ne pouvez pas imbriquer des classes comme ça.
Regardez la section "étend" de le manuel .