Clase PHP: variable global como propiedad en clase

Tengo una variable global fuera de mi clase = $ MyNumber;

¿Cómo declaro esto como una propiedad en myClass ?
Para cada método en mi clase, esto es lo que hago:

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

quiero esto

 class myClass() { //What goes here? var $classNumber = ???//the global $MyNumber; private function foo() { $privateNumber = $this->classNumber; } } 

EDITAR: Quiero crear una variable basada en el $ MyNumber global, pero
modificado antes de usarlo en los métodos

algo así como: var $ classNumber = global $ MyNumber + 100;

Probablemente no quieras hacer esto, ya que será una pesadilla para depurar, pero parece posible. La clave es la parte donde se asigna por referencia en el constructor.

 $GLOBALS = array( 'MyNumber' => 1 ); class Foo { protected $glob; public function __construct() { global $GLOBALS; $this->glob =& $GLOBALS; } public function getGlob() { return $this->glob['MyNumber']; } } $f = new Foo; echo $f->getGlob() . "\n"; $GLOBALS['MyNumber'] = 2; echo $f->getGlob() . "\n"; 

La salida será

 1 2 

que indica que se está asignando por referencia, no por valor.

Como dije, será una pesadilla para depurar, por lo que realmente no deberías hacer esto. Lea el artículo de Wikipedia sobre encapsulación ; básicamente, su objeto idealmente debería gestionar sus propios datos y los métodos en los que se modifican esos datos; incluso las propiedades públicas son en general, en mi humilde opinión, una mala idea.

Intenta evitar los globales, en su lugar puedes usar algo como esto

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

Ahora puedes llamar

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

Simplemente use la palabra clave global .

p.ej:

 class myClass() { private function foo() { global $MyNumber; ... 

$ MyNumber se volverá accesible (y de hecho modificable) dentro de ese método.

Sin embargo, el uso de globals a menudo está mal visto (pueden emitir un mal olor de código), por lo que es posible que desee considerar el uso de una clase singleton para almacenar algo de esta naturaleza. (Por otra parte, sin saber más acerca de lo que está tratando de lograr, esta podría ser una muy mala idea; una definición podría ser más útil).

Lo que he experimentado es que no puede asignar su variable global a una variable de clase directamente.

 class myClass() { public $var = $GLOBALS['variable']; public function func() { var_dump($this->var); } } 

Con el código de arriba, aparece un error que dice ” Error de análisis: error de syntax, inesperado ‘$ GLOBALS’

Pero si hacemos algo como esto,

 class myClass() { public $var = array(); public function __construct() { $this->var = $GLOBALS['variable']; } public function func() { var_dump($this->var); } } 

Nuestro código funcionará bien.

Donde asignamos una variable global a una variable de clase debe estar dentro de una función. Y he usado la función constructora para esto.

Entonces, puedes acceder a tu variable global dentro de cada función de una clase simplemente usando $ this-> var ;

¿Qué tal usar constructor?

 class myClass { $myNumber = NULL; public function __construct() { global myNumber; $this->myNumber = &myNumber; } public function foo() { echo $this->myNumber; } } 

O mucho mejor de esta manera (pasando la variable global como parámetro al inicializar el objeto – solo lectura)

 class myClass { $myNumber = NULL; public function __construct($myNumber) { $this->myNumber = $myNumber; } public function foo() { echo $this->myNumber; } } $instance = new myClass($myNumber); 

Si desea acceder a una propiedad desde dentro de una clase, debe:

 private $classNumber = 8; 

clase myClass {protected $ foo;

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

}