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

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'] им не является, ибо ты нигде не написал, что ты его создаёшь как экземпляр класса.

 

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

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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