web-dev-qa-db-fra.com

Quand devrais-je déclarer des variables dans un PHP classe?

Je suis nouveau dans le paradigme OOP, donc il y a probablement une explication simple à cette question ...

Avez-vous toujours besoin de déclarer des variables publiques à l'échelle de l'objet dans une classe? Par exemple:

<?php

class TestClass
{
    var $declaredVar;

    function __construct()
    {
        $this->declaredVar = "I am a declared variable.";
        $this->undeclaredVar = "I wasn't declared, but I still work.";
    }

    function display()
    {
        echo $this->declaredVar . "<br />";
        echo $this->undeclaredVar;
        echo "<br /><br />"; 
    }
}

$test = new TestClass;
$test->display();

$test->declaredVar = "The declared variable was changed.";
$test->undeclaredVar = "The undeclared variable was changed.";

$test->display();

?>

Dans ce code, même si $declaredVar est la seule variable déclarée, $undeclaredVar est tout aussi accessible et utilisable - cela semble agir comme si je l'avais déclarée publique. 

Si les variables de classe non déclarées sont toujours accessibles comme ça, à quoi sert-il de les déclarer toutes à l’avance? 

41
Andrew

Cette variable n'est pas non initialisée, elle est simplement non déclarée.

La déclaration de variables dans une définition de classe est un point de style pour la lisibilité . De plus, vous pouvez définir l'accessibilité (privée ou publique).

Quoi qu'il en soit, la déclaration explicite de variables n'a rien à voir avec la POO, elle est spécifique au langage de programmation. En Java, vous ne pouvez pas le faire car les variables doivent être déclarées explicitement.

38

Si vous déclarez un membre dans la classe, vous pouvez définir son accessibilité, par exemple.

private $varname;
14
Dave Archer

Vous devez toujours déclarer vos variables de membre et spécifier leur accessibilité dans vos classes. J'aime mettre cette information à la fin de la classe après mes fonctions.

Vous devez les définir dès que vous avez suffisamment d'informations pour le faire. Peut-être dans le constructeur ou via les fonctions setter.

Il est important de procéder ainsi car cela simplifie grandement la vie des personnes travaillant avec votre code. Ils n'ont pas à deviner d'où proviennent les différentes propriétés ni pourquoi elles sont présentes. En outre, la plupart des IDE (si ce n'est tous) n'accepteront les variables de classe que si vous les avez déclarées quelque part. La complétion de code/les astuces sont l’un des nombreux avantages des environnements de développement intégrés. Sans déclarer vos variables, vous rendrez cette fonctionnalité inutile.

11
Michael Moussa

Le paradigme général de l'encapsulation OOP indique que vous ne devez pas exposer vos variables d'état internes de manière à ce qu'elles soient privées, ce qui vous permet de modifier une implémentation de votre classe sans avoir à modifier le code où vous l'utilisez. Il est préférable d’initialiser les variables via les constructeurs et les méthodes d’ajustement et d’ajustement de la classe.

1
Artem Barger

En général, les variables doivent être initialisées dès que vous avez assez d’informations pour le faire correctement.

Si une variable de classe a besoin de certaines informations pour être initialisées de manière judicieuse, ces informations doivent être transmises au constructeur.

Utiliser la syntaxe de PHP pour déclarer implicitement les variables au moment de la définition est, à mon humble avis, un moyen infaillible d'introduire des bogues - si votre classe a besoin d'une variable, déclarez-la et utilisez toutes les informations cachées que vous fournit OOP.

0
PaulJWilliams

Comme Federico Culloca a déclaré: "Cette variable n'est pas non initialisée, elle est simplement non déclarée". De plus, vous n'avez défini aucun modificateur d'accès pour eux, de sorte qu'ils se comportent comme un modificateur public qui leur est appliqué. 

Vous avez peut-être déjà su. PHP est un langage mal typé. Mais un programmeur devrait toujours suivre les meilleures pratiques (mais ne pas utiliser de types de données primitifs en php). 

Vous devez utiliser le modificateur privé pour les variables de niveau classe et leur fournir des méthodes d'accès et de mutation (Getters and Setters).

0
Sajidur Rahman