@generate
...

Как в классе использовать global?

Подскажите как в начале класса получить все необходимые переменные которые стоят вне класса.
<?php
$a = 'test';

class Cls {
	global $a;

	public function printer(){
		echo $this->a;
	}
}

$get = new Cls();
$get->printer();
  • Вопрос задан
  • 162 просмотра
Решения вопроса 2
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
1. Передать их аргументами в конструктор класса
2. $GLOBALS - плохой выбор, крайне не рекомендую использовать.

<?php
$a = 'test';

class Cls {

  public function __construct($a) {
     $this->a = $a;
  }
  public function printer(){
    echo $this->a;
  }
}

$get = new Cls($a);
$get->printer();
Ответ написан
@rPman
global может использоваться только внутри методов или функций, т.е.
$a = 'test';

class Cls {

  public function __construct($a) {
    global $a;
    $this->a = $a;
  }
  public function printer(){
    global $a;
    echo $this->a;
  }
}

$get = new Cls($a);
$get->printer();


Использование global - очень неверная стратегия, и ее нужно избегать всеми силами....

В крайнем случае используй static (если нужно чтобы переменная была единая для всех экземпляров класса), причем его можно использовать как в пределах описания переменных и методов класса так и внутри функции при определении переменной

Если прямо надо сильно глобальную переменную и лень писать global в каждом методе, пользуйся функциями, определенных глобально, их будет видно везде. Пример реализации сиквенса:
function next_seq() {
  static id=0;
  return id++;
}

или даже возвращающего целые объекты или массивы
function yoyo() {
  static $o=false;
  if($o===false) $o=new MyCoolObject();
  return $o;
}
использовать:
yoyo()->myCoolMethod();


Еще раз глобальная область видимости - бад практикс, везде старайтесь заворачивать весь функционал вокруг класса или хотя бы неймспейса. Это просто как ходить опрятно и не пованивать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽