@roma_zero

Как обой без гобальных переменх в PHP?

Начал учить PHP, изучил осовы, чтобы было интересно сам придумал себе заание сам же ег и вполняю. Так вот, потебовалось брать данные корые нужны в то или иной фунции, чтобы н раскидывать их по всему коду, и для удобства потом изменять вынес в отдлный файл config.php (такую практику я замечал изучая чужие коды). В код естественно загржаю их с помощью $GLOBALS['переменая']. И тут получил замечание мол global использвать плохой тон, основания я не получил, но осадочк отался. Единсвенное обоснония я встречал лишь то что другоу прогрммисту это будет сложно читать. Вопрос, как испоьзовать переменные и файла config.php и при этом не быть редиской в глзах других прогрмистов, считающих это плохим тоном?

P.S.
Весь скрипт который я пишу выплняется из консоли, поьзователю ни чего не нужно отображать.
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
Пространства имен и классы, например,
spoiler
<?php

namespace App;

class Config {

	private $values = [];

	public function __construct()
	{
		$this->readfile();
	}

	public function readfile()
	{
		// read config.json
		// 
		// save to ->values
	};

	// get
	// set
	// or magic methods

	public function getValue()
	{
		return ...;
	};
}

class App {
	private $_config;
	private $_instance = NULL;

	static public function get_instance()
	{
		if (!$this->_instance)
		{
			$this->_instance = new App;
		}

		return $this->_instance;
	};

	public function __construct()
	{
		$this->_config = new Config;
	}

	public function __get($variable)
	{
		if ($variable === "config")
		{
			return $this->_config;
		}
	};
}


use \App\App;

App::get_instance()
	->config->getValue("my.super.value")
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
solotony
@solotony
покоряю пик Балмера
если в языке есть какая-то возможность то используй ее наздоровье. естественно надо аккуратно подходить и не пихать в GLOBALS все подряд, но если у тебя есть какие-то ключевые параметры (в особенности когда они не изменяются), влияющие на весь проект, то им там самое место. например флаг отладки, флаг продакшн/девелопмент.

но если у тебя в действительности локальный параметр, то засовывать его в GLOBALS дурной тон, тут я согласен.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы