web-dev-qa-db-fra.com

Définition de variables de classe publiques

Comment définir une variable publique. Est-ce correct?:

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

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

$Testclass = new Testclass();
$Testclass->testvar = "another value";    
$Testclass->dosomething();
11
Cudos

c'est le chemin, mais je suggérerais 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();
24
marvin
class Testclass
{
  public $testvar;

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

$Testclass = new Testclass();
$Testclass->testvar = "another value";    
$Testclass->dosomething(); ////It will print "another value"
4
Gurunatha Dogi

Utilisez des constructeurs.

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

Si vous allez suivre les exemples donnés (en utilisant getter/setter ou en le plaçant dans le constructeur) changez-le en privé car ce sont des moyens de contrôler ce qui est défini dans la variable. 

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

0
AntonioCS

class Testclass intérieur:

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

Vous "définissez" la valeur de cette variable/attribut. Ne pas le surcharger ou le 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 concernent le polymorphisme (sous-classement).

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

Le polymorphisme permet au programmeur de traiter les membres de classe dérivés comme les membres de leur classe mère. Plus précisément, le polymorphisme dans la programmation orientée objet est la capacité des objets appartenant à différents types de données à répondre aux appels de méthodes de méthodes du même nom, chacun selon un comportement spécifique au type approprié. Une méthode, ou un opérateur tel que +, - ou *, peut être appliqué de manière abstraite dans de nombreuses situations différentes. Si on ordonne à un chien de parler (), cela peut provoquer un aboiement (). Cependant, si on demande à un cochon de parler (), cela peut provoquer un oink (). Ils héritent tous deux de speak () de Animal, mais leurs méthodes de classes dérivées remplacent les méthodes de la classe parente. c'est neutraliser le polymorphisme. La surcharge de polymorphisme consiste à utiliser une signature de méthode ou un opérateur tel que "+" pour exécuter plusieurs fonctions différentes selon 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 censées s'additionner correctement dans une langue OOP. Le langage doit donc surcharger l'opérateur d'addition "+" pour fonctionner de cette façon. Cela contribue à améliorer la lisibilité du code. La manière dont cela est mis en œuvre varie d'une langue à l'autre, mais la plupart des langues OOP prennent en charge au moins un certain niveau de polymorphisme surchargé.

0
Scott Saunders

Pour surcharger, vous auriez besoin d'une sous-classe:

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

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

Ce code devrait refléter newVal.

0
Wim

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

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

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