Это плохая практика программирования?

Возможный дубликат:
[PHP] глобальные функции

Является ли плохой практикой программирования (PHP) доступ к глобальной переменной в функции внутри класса следующим образом?

class test{ function a(){ global $myvar; .. } function b(){ global $myvar; .. } } 

Благодарю.

Это не изящно. Вы должны передать этот var внутри конструктора и сохранить его в private $var внутри класса, который будет использоваться в каждой функции с помощью простого $this->var .

 $myUnicorn = "Pink"; class Unicorn { private $currentUnicorn; public function __construct($current) { $this->currentUnicorn = $current; } public function echoIt() { echo $this->currentUnicorn; } public function killIt() { unset($this->currentUnicorn); // :( } } $u = new Unicorn($myUnicorn); $u->killIt(); с $myUnicorn = "Pink"; class Unicorn { private $currentUnicorn; public function __construct($current) { $this->currentUnicorn = $current; } public function echoIt() { echo $this->currentUnicorn; } public function killIt() { unset($this->currentUnicorn); // :( } } $u = new Unicorn($myUnicorn); $u->killIt(); 

По-моему, это так. Вы всегда можете «публиковать» свою глобальную переменную в своих методах с помощью конструктора и поддерживать связь через поле.

С моей точки зрения, да, это не очень хорошая практика для использования, как и вы. Вы можете использовать это как

 class test{ private $myVar; function __construct($myVar) { $this->myVar = $myVar; } function a(){ echo $this->myvar; .. } } class test{ private $myVar; function __construct() { global $myVar; $this->myVar = $myVar; } function a(){ echo $this->myvar; .. } } 

Вы не должны делать что-то подобное, если вам это не нужно. Если есть лучший способ сделать это, что имеет смысл, то используйте его. Например, некоторые люди используют это для доступа к конфигурационным переменным, но лучший способ – использовать инструкции define() или статический класс и файл.

TL; DR – Делайте это только в случае необходимости. В противном случае, не надо.

ИМО это очень плохо. Вы делаете свой класс зависимым от внешней переменной. Объекты, созданные в контексте, где эта переменная не существует, не будут работать.

Передайте переменную в конструктор класса. Таким образом, объект может быть создан только в том случае, если указан параметр.