Возможный дубликат:
[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 – Делайте это только в случае необходимости. В противном случае, не надо.
ИМО это очень плохо. Вы делаете свой класс зависимым от внешней переменной. Объекты, созданные в контексте, где эта переменная не существует, не будут работать.
Передайте переменную в конструктор класса. Таким образом, объект может быть создан только в том случае, если указан параметр.