Question

Comment puis-je définir une variable publique. Est-ce exact?

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

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

$Testclass = new Testclass();
$Testclass->testvar = "another value";    
$Testclass->dosomething();
Était-ce utile?

La solution

est le chemin, mais je suggère d'écrire un getter et 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();

Autres conseils

Utilisez Constructors.

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

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

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

Pour vous auriez besoin de surcharger une sous-classe:

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

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

Ce code écho newVal.

Vous êtes « réglage » la valeur de cette variable / attribut. Ne surchargez pas ou surcharger. Votre code est très, très fréquent et normal.

Tous ces termes ( "set", "override", "surcharge") ont une signification particulière. Passer outre et de surcharge 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 dans la programmation orientée objet est la capacité des objets appartenant à différents types de données pour répondre à des appels de méthodes de procédés du même nom, chacun selon un comportement spécifique d'un type approprié. Une méthode, ou un opérateur tel que +, - ou *, peuvent être abstraitement appliquées dans de nombreuses situations différentes. Si un chien est commandé de dire (), cela peut provoquer une écorce (). Cependant, si un porc est commandé de dire (), cela peut provoquer une Oink (). Ils ont tous deux hériteront parler () de l'animal, mais leurs méthodes de classe dérivées remplacent les méthodes de la classe mère; c'est Redéfinition Polymorphisme. Polymorphisme est l'Surcharge utilisation d'une signature de la méthode, ou un opérateur tel que « + », pour effectuer plusieurs fonctions différentes en fonction de la mise en œuvre. Le « + » opérateur, par exemple, peut être utilisé pour effectuer une addition entier, float outre, concaténation de liste ou concaténation de chaînes. Tous les deux sous-classes de nombre, comme Integer et Double, devraient ajouter ensemble correctement dans une langue POO. Le langage doit donc surcharger l'opérateur d'addition, « + », de travailler de cette façon. Cela contribue à améliorer la lisibilité du code. Comment cela est mis en œuvre varie d'une langue à l'autre, mais la plupart des langages de POO supporter au moins un certain niveau de polymorphisme surcharge.

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.

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

Ajouter getter et méthode setter à votre classe.

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

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

À l'intérieur class Testclass:

public function __construct($new_value)
{
    $this->testvar = $new_value;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top