web-dev-qa-db-fra.com

PHP class: Variable globale comme propriété de la classe

J'ai une variable globale en dehors de ma classe = $ MyNumber;


Comment déclarer cela comme une propriété dans myClass?
Pour chaque méthode de ma classe, voici ce que je fais:

class myClass() {

    private function foo() {
         $privateNumber = $GLOBALS['MyNumber'];
    }

}



Je veux ceci

class myClass() {

    //What goes here?
    var $classNumber = ???//the global $MyNumber;

    private function foo() {
         $privateNumber = $this->classNumber;
    }

}



EDIT: Je veux créer une variable basée sur le $ global MyNumber mais
modifié avant de l'utiliser dans les méthodes 

quelque chose comme: var $ classNumber = global $ MyNumber + 100; 

27
Zebra

Essayez d'éviter les globals, vous pouvez utiliser quelque chose comme ceci

class myClass() {
 private $myNumber;

 public function setNumber($number) {
  $this->myNumber = $number;
 }
}

Maintenant tu peux appeler

$class = new myClass();
$class->setNumber('1234');
10
mrwooster

Qu'en est-il de l'utilisation de constructeur?

class myClass {

   $myNumber = NULL;

   public function __construct() {
      global myNumber;

      $this->myNumber = &myNumber; 
   }

   public function foo() {
      echo $this->myNumber;
   }

}

Ou beaucoup mieux de cette façon (en passant la variable globale en paramètre lorsque inicializin l'objet - en lecture seule)

class myClass {

   $myNumber = NULL;

   public function __construct($myNumber) {
      $this->myNumber = $myNumber; 
   }

   public function foo() {
      echo $this->myNumber;
   }

}
$instance = new myClass($myNumber);
2
Petr Peller

Ce que j'ai expérimenté, c'est que vous ne pouvez pas affecter votre variable globale à une variable de classe directement.

class myClass() {

    public $var = $GLOBALS['variable'];

    public function func() {
         var_dump($this->var);
    }
}

Avec le code ci-dessus, vous obtenez une erreur "erreur d'analyse: erreur de syntaxe, '$ GLOBALS'"

Mais si nous faisons quelque chose comme ça,

class myClass() {

    public $var = array();

    public function __construct() {
        $this->var = $GLOBALS['variable'];
    }

    public function func() {
         var_dump($this->var);
    }

}

Notre code fonctionnera bien.

Où nous assignons une variable globale à une variable de classe doit être à l'intérieur d'une fonction. Et j'ai utilisé la fonction constructeur pour cela.

Ainsi, vous pouvez accéder à votre variable globale dans chacune des fonctions d'une classe en utilisant simplement $ this-> var ;

2
emre

Si vous souhaitez accéder à une propriété depuis une classe, vous devez:

private $classNumber = 8;
1
Gal

classe myClass { $ foo protégé;

public function __construct(&$var)
{
    $this->foo = &$var;
}

public function foo()
{
    return ++$this->foo;
}

}

0
Xerxes