Перейти к контенту

KILL global - USE $GLOBALS[] - Вопрос по PHP/IPB


Рекомендуемые сообщения

// У меня большая просьба к тем людям, которые искренне любят IPB и профессионально преданы языку PHP...

// Я не программист и не собираюсь им становиться... я любитель и просто испытываю большую симпатию к PHP и хотел бы разобраться на примере IPB в ряде аспектов PHP...

// Ниже приведены ряд примеров... Если найдется компетентный человек, который окинув своим профессиональным взором нижеуказанные примеры - растолкует ошибки или наоборот одобрит некоторые решения с отказом от GLOBAL и использованием $GLOBALS[]...

// P.S.: просто хочется разобраться, можно_ли так поступать или не желательно...

 

// Пример абстактен - его не нужно и нет необходимости вставлять в код форума... для тех, кто знаком со структурой IPB 1.x.x сразу поймет.

// *Тестировать не нужно, ибо таблица ibf_test взяата для примера...

 

// Пример #1 - WITH GLOBAL - Классический.

function test() {
global $DB;

$DB->query("SELECT test FROM ibf_test");    
$test = $DB->fetch_row();

}

 

 

// Пример #2 - WITHOUT GLOBAL

function test() {
// global $DB; // HERE WE KILL GLOBAL!

$GLOBALS['DB']->query("SELECT test FROM ibf_test");    
$test = $GLOBALS['DB']->fetch_row();

}

 

// Пример #3

// Шаг 1: Добавляем в index.php простейший код

$DB->query("SELECT test FROM ibf_test");    
$test = $DB->fetch_row();
$ibforums->test = $skin_universal->test($test);

 

// Шаг 2: Добавляем в skin_global.php шаблон для test

function test($test) {
return <<<EOF
{$test}
EOF;
}

 

// Шаг 3: Далее... смотрим и решаем, где будет отображение test - для примера вставляем в function BoardHeader() P.S. можно было-бы сделать новый вывод <% TEST %> в функции function do_output, но это не суть...

 

function BoardHeader() {
global $ibforums;
return <<<EOF
{$ibforums->test}
<br />
EOF;
}

 

// А теперь следующий пример #4, но WITH-OUT GLOBAL + с некоторыми нюансами

 

// Шаг 1: Добавляем в index.php простейший код

$DB->query("SELECT test FROM ibf_test");    
$test = $DB->fetch_row();
$go_go = $skin_universal->test(); // нюанс * $test - no here

 

// Шаг 2: Добавляем в skin_global.php шаблон для test

function test() {
return <<<EOF
{$GLOBALS['test']}
EOF;
}

// Здесь сразуже вопрос... как лучше здесь поступать - добавлять $test в $skin_universal->test($test); или же нет $skin_universal->test(); а использовать {$GLOBALS['test']} внутри function test()

 

// Ну и следующий шаг будет выглядеть так

 

// Шаг 3:

function BoardHeader() {
// global $ibforums;
return <<<EOF
{$GLOBALS['go_go']}
<br />
EOF;
}

 

 

// P.S. заранее благодарен тем, кто растолкует данные решения с $GLOBALS[]

// Просьба не задавать вопроса... - А зачем это нужно то? цель выяснить - можно_ли так и правильно_ли...

Ссылка на комментарий
Поделиться на других сайтах

// global $DB; // HERE WE KILL GLOBAL!

 

Осмелюсь предположить, что запрос тогда вообще не выполнится.

 

Вообще еле понял, что требуется ибо примеры составлены не по порядку.

Я так думаю, что лучше через параметры, т.к. любое использование глобальных объектов требует повышенного перераспределения памяти.

Конечно, я согласен, меньше требуется вмешательства руциями, когда используются $GLOBALS

Ссылка на комментарий
Поделиться на других сайтах

// global $DB; // HERE WE KILL GLOBAL!

 

Осмелюсь предположить, что запрос тогда вообще не выполнится.

 

function test() {
// global $DB; // HERE WE KILL GLOBAL!

$GLOBALS['DB']->query("SELECT test FROM ibf_test");    
$test = $GLOBALS['DB']->fetch_row();

}

 

Ну почему_же... выполнится... ибо в index.php - $DB = new db_driver;

Вот посему и спрашиваю... в чем разница - если в функции будет global $DB;

или напрямую $GLOBALS['DB']

Ссылка на комментарий
Поделиться на других сайтах

Ну почему_же... выполнится... ибо в index.php - $DB = new db_driver;

Да потому что ты эту строку закомментировал.

И он не знает что такое за экземпляр класса $DB.

 

И даже если $DB - это класс драйвера, то $GLOBALS['DB'] им не является, ибо ты нигде не написал, что ты его создаёшь как экземпляр класса.

 

или ты думаешь, что $объект по волшебству становится подключаемым к базе ?

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.