2009-12-30 9 views
10

Comment définir une variable publique. Est-ce exact ?:Définition des variables de classe publique

class Testclass 
{ 
    public $testvar = "default value"; 

    function dosomething() 
    { 
    echo $this->testvar; 
    } 
} 

$Testclass = new Testclass(); 
$Testclass->testvar = "another value";  
$Testclass->dosomething(); 
+3

Votre est bien – Greg

Répondre

21

c'est le chemin, mais je suggère d'écrire un getter et un setter pour cette variable.

class Testclass 

{ 
    private $testvar = "default value"; 

    public function setTestvar($testvar) { 
     $this->testvar = $testvar; 
    } 
    public function getTestvar() { 
     return $this->testvar; 
    } 

    function dosomething() 
    { 
     echo $this->getTestvar(); 
    } 
} 

$Testclass = new Testclass(); 

$Testclass->setTestvar("another value"); 

$Testclass->dosomething(); 
+4

avec setter et getter, vous devriez mettre $ testvar à privé :) – nXqd

+0

oh oui, ce serait plus approprié. Merci de m'avoir signalé. – marvin

+1

Pourquoi suggérez-vous cela? Est-ce maintenant obsolète ou encore une bonne méthode? – tehlivi

0

intérieur class Testclass:

public function __construct($new_value) 
{ 
    $this->testvar = $new_value; 
} 
0

Vous "réglage" la valeur de cette variable/attribut. Ne pas surcharger ou surcharger. Votre code est très, très commun et normal.

Tous ces termes ("set", "override", "overload") ont des significations spécifiques. Override et Overload sont sur le polymorphisme (sous-classement).

De http://en.wikipedia.org/wiki/Object-oriented_programming:

Polymorphisme permet au programmeur de traiter les membres de la classe dérivée, tout comme leurs parents classe membres. Plus précisément, le polymorphisme en programmation orientée objet est la capacité des objets appartenant à différents types de données à répondre aux appels de méthode de méthodes du même nom, chacun selon un comportement spécifique au type. Une méthode, ou un opérateur tel que +, -, ou *, peut être appliquée abstraitement dans de nombreuses situations différentes. Si un chien est commandé de parler(), cela peut provoquer un aboiement(). Cependant, si un Pig est commandé à speak(), cela peut provoquer un oink(). Ils héritent tous deux de speak() de Animal, mais leurs méthodes de classe dérivées remplacent les méthodes de la classe parente; c'est le polymorphisme dominant. Polymorphisme de surcharge est l'utilisation d'une signature de méthode, ou un opérateur tel que "+", pour effectuer plusieurs fonctions différentes en fonction de l'implémentation. L'opérateur "+", par exemple, peut être utilisé pour effectuer une addition d'entier, une addition flottante, une concaténation de liste ou une concaténation de chaîne. Deux sous-classes de Number, telles que Integer et Double, sont supposées s'ajouter correctement dans un langage OOP. Le langage doit donc surcharger l'opérateur d'addition, "+", pour fonctionner de cette façon. Cela aide à améliorer la lisibilité du code. La façon dont cela est mis en œuvre varie d'une langue à l'autre, mais la plupart des langages POO supportent au moins un certain niveau de polymorphisme de surcharge.

+0

Ouais ... était juste en utilisant le mauvais terme – Cudos

+0

surcharge et passer outre et mettre tous ont des significations spécifiques. Avez-vous obtenu une réponse à votre code? Ou recherchez-vous spécifiquement des informations sur la surcharge? –

+0

Juste vu votre dernier edit à la question. Tu le fais bien. Comme d'autres l'ont dit, vous pouvez utiliser les méthodes get et set si vous le souhaitez, mais vous n'êtes pas obligé de le faire. Ils ont des avantages, surtout si vous devez vérifier que les données sont d'un certain type avant de les définir. –

0

Pour une surcharge, vous aurez besoin d'une sous-classe:

class ChildTestclass extends Testclass { 
    public $testvar = "newVal"; 
} 

$obj = new ChildTestclass(); 
$obj->dosomething(); 

Ce code écho newVal.

0

Ajoutez la méthode getter et setter à votre classe.

public function setValue($new_value) 
{ 
    $this->testvar = $new_value; 
} 

public function getValue() 
{ 
    return $this->testvar;   
} 
2

Utilisez les constructeurs.

<?php 
class TestClass 
{ 
    public $testVar = "default value"; 
    public function __construct($varValue) 
    { 
     $this->testVar = $varValue;    
    } 
}  
$object = new TestClass('another value'); 
print $object->testVar; 
?> 
+0

votre code n'a aucun sens, il ne sortira rien – Greg

+2

vérifier maintenant, j'ai changé le testvar à testVar –

0

Si vous allez suivre les exemples donnés (en utilisant le réglage ou getter/setter dans le constructeur) à changer privé puisque ce sont des moyens de contrôler ce qui est défini dans la variable.

Cela n'a aucun sens de garder la propriété publique avec toutes les choses ajoutées à la classe.

4
class Testclass 
{ 
    public $testvar; 

    function dosomething() 
    { 
    echo $this->testvar; 
    } 
} 

$Testclass = new Testclass(); 
$Testclass->testvar = "another value";  
$Testclass->dosomething(); ////It will print "another value" 
Questions connexes