У меня есть config.php
, который включен в каждую страницу. В config я создаю массив, который выглядит примерно так:
$config = array();
$config['site_name'] = 'Site Name';
$config['base_path'] = '/home/docs/public_html/';
$config['libraries_path'] = $config['base_path'] . '/libraries';
//etc...
Тогда у меня есть function.php
, который также включен в почти каждую страницу, где я должен использовать global $config
, чтобы получить к нему доступ - и это то, что я хотел бы избавиться от!
Как мне получить доступ к $config
в других частях моего кода без использования global
?
Может ли кто-нибудь объяснить, ПОЧЕМУ Я не должен использовать global
в моем примере? Некоторые говорят, что это плохой тон, другие говорят, что это не безопасно?
EDIT 1:
Пример того, где и как я его использую:
function conversion($Exec, $Param = array(), $Log = '') {
global $config;
$cmd = $config['phppath'] . ' ' . $config['base_path'] . '/' . $Exec;
foreach ($Param as $s)
{
$cmd .= ' ' . $s;
}
}
ИЗМЕНИТЬ 2:
Вводя все это в класс, как было предложено Vilx, было бы круто, но в этом случае, как бы связать его со следующим циклом, который извлекает config key
и value
из базы данных.
Я упростил идею назначения массива $config
, вот пример:
$sql = "SELECT * from settings";
$rsc = $db->Execute($sql);
if ( $rsc ) {
while(!$rsc->EOF) {
$field = $rsc->fields['setting_options'];
$config[$field] = $rsc->fields['setting_values'];
@$rsc->MoveNext();
}
}
ИЗМЕНИТЬ 3:
Кроме того, мне нужно получить доступ к другим vars
из функций, которые установлены в config, и некоторые из них, например: $db
, $language
и т.д.
Если я помещу их в класс, он действительно решит что-нибудь? Если я использую global
, что это действительно изменится?
EDIT 4:
Я читал PHP глобальный в функциях, где Gordon объясняет очень хороший способ, почему вы должны 't использовать global
. Я согласен на все, но я не использую global
в моем случае для переназначения переменных, что приведет, как он сказал, <-- WTF!!
,;)) Да, согласитесь, это безумие. Но если мне просто нужно получить доступ к базе данных из функции, просто используя global $db
, где проблема в этом случае? Как вы это делаете в противном случае, не используя global
?
РЕДАКТИРОВАТЬ 5:
В том же PHP-глобальном в функциях deceze говорится: "Одна большая причина против глобального заключается в том, что это означает, что функция зависит от другой области. очень беспорядочный".
Но я говорю здесь об основном "INIT". Я в основном устанавливаю define
, но использую vars
- ну, это неправильно по техническим причинам. Но ваша функция не зависит ни от чего, а от имени одного var $db
, о котором вы могли бы помнить? Это действительно глобальная необходимость использовать $db
, где здесь находится ЗАВИСИМОСТЬ и как использовать ее в противном случае?
PS Я просто подумал, что мы столкнулись с конфликтом здесь двух разных умов, например: мой (еще не хорошо понимающий объектно-ориентированное программирование) и тех, кого можно назвать гуру (с моей нынешней точки зрения) в ООП - то, что для них очевидно для меня, вызывает новые вопросы. Я думаю, почему этот вопрос задают снова и снова. Лично для меня это стало понятным, но все же есть вещи, которые нужно прояснить.