variable una hacer estaticas declaracion array php class variables methods

una - php scope variable



Clase PHP: variable global como propiedad en clase (7)

¿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);

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;


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'');


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, se obtiene un error que dice " Error de análisis: error de sintaxis, 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 ;


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 encapsulation ; 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.


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

private $classNumber = 8;


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, a menudo se desaprueba el uso de globales (pueden emitir un mal olor a código), por lo que es posible que desee considerar el uso de una clase de 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 define podría ser más útil).


clase myClass {protected $ foo;

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

}