32 votes

Comment utiliser les classes internes en PHP?

Je suis de Java arrière-plan, et je veux utiliser un intérieur de classe en php. Chaque fois que j'ai mis à l'intérieur de la classe si, j'obtiens une erreur de syntaxe. Est-ce possible en PHP? Aussi, comment dois-je faire référence à l'extérieur de la classe? Puis-je accéder à TOUTES ses données membres?

<?php

class OuterClass {
    var $x = 15;
    function __construct() {

    }

    class InnerClass {                  // error when InnerClass is static
        function __construct() {        // error when InnerClass is static
            echo $x;
        }
    }
}

?>

Il est utilisé pour un MoveClass (comme dans faire un geste d'un jeu de cartes. Je pense que ce serait une bonne conception pour mettre ces classes ensemble, parce qu'elles ne font pas de sens en dehors. Aussi, le MoveClass besoins de connaître quelques-unes des données membres de la classe de Jeu. Pourquoi ne pas faire une fonction? Il est tout simplement trop grande.

Edit:

Quid des classes imbriquées? Ce que je comprends, ceux-ci doivent être statique? O_o

21voto

Russell Dias Points 17162

PHP ne permet pas à l'intérieur des classes. Si vous souhaitez accéder à toutes les données membres de la classe parent, je vous suggère d'employer l'Héritage.

Une alternative possible:

class OuterClass {
    var $x = 15;
    function __construct() {

    }
}
class ChildClass extends OuterClass {
    function __construct() {
        parent::__construct();
    }
}

Vous pouvez envoke une méthode formulaire de la classe parente en se référant à la classe elle-même; En PHP, vous pouvez le faire avec l' parent mot-clé. Donc, pour faire référence à une méthode dans le contexte d'une classe plutôt que d'un objet que nous utilisons :: plutôt ->.

7voto

Jason Points 39

en PHP 5.4 ou une version ultérieure, vous pouvez utiliser PHP Traits qui sont conçus plus pour l'héritage multiple, mais peut convenir à vos besoins. À partir de la Documentation PHP:

Un Trait est semblable à une classe, mais il ne sert qu'à groupe la fonctionnalité dans un grain fin et uniforme. Il n'est pas possible pour instancier un Trait sur son propre. C'est un plus de la traditionnelle héritage et permet la composition horizontale de comportement; c'est, la demande de membres de la classe sans besoin d'héritage.

http://php.net/manual/en/language.oop5.traits.php

1voto

mqsoh Points 1833

Vous voudrez peut-être utiliser une stdClass à la place. Voici une question SO à ce sujet: Qu'est-ce que stdClass en PHP?

0voto

simshaun Points 14463

Vous ne pouvez pas imbriquer des classes comme ça.

Regardez la section "étend" du manuel .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X