Използване на променливи в PHP функция

Добре, имам три файла... за примерни цели: config.php, functions.php и index.php

В config.php имам всички променливи, необходими за работата на сайта, настройки, db подробности и т.н. Във functions.php функцията, която се опитвам да накарам да работи, е както следва:

function db_connect() {
    mysql_connect($app_config['mysql_server'], $app_config['mysql_username'], $app_config['mysql_password']) or db_die(__FILE__, __LINE__, mysql_error());
    mysql_select_db($app_config['mysql_database']) or db_die(__FILE__, __LINE__, mysql_error());

}

Това, което трябва да се отнася, са променливи, зададени в config.php, напр.:

$app_config['mysql_username'] = "root";
$app_config['mysql_password'] = "password";

Както config.php, така и functions.php са необходими в index.php, който използва функцията, но в регистрационния файл за грешки на PHP получавам следното (повече от веднъж за различните екземпляри):

[Mon May 28 02:02:46 2012] [error] [client <removed>] PHP Notice:  Undefined variable: app_config in /usr/home/<removed>/functions.php on line 11

Дори се опитах да включа config.php във functions.php, но без резултат. Някакви идеи защо това не работи? Сигурен съм, че е сравнително просто, но просто не мога да го проумея..


person Henry C    schedule 28.05.2012    source източник


Отговори (2)


две опции: чрез договор или глобални променливи

function db_connect() {
    global $app_config;
    mysql_connect($app_config['mysql_server'], $app_config['mysql_username'], $app_config['mysql_password']) or db_die(__FILE__, __LINE__, mysql_error());
    mysql_select_db($app_config['mysql_database']) or db_die(__FILE__, __LINE__, mysql_error());
}

// contract
function db_connect(array $app_config) {        
    mysql_connect($app_config['mysql_server'], $app_config['mysql_username'], $app_config['mysql_password']) or db_die(__FILE__, __LINE__, mysql_error());
    mysql_select_db($app_config['mysql_database']) or db_die(__FILE__, __LINE__, mysql_error());
}

въпреки че можете да направите нещо по-„елегантно“ и да създадете клас

person Gabriel Sosa    schedule 28.05.2012

global $app_config, искате да поставите това във функцията, преди да използвате нещо от тази променлива

Това основно казва извличане на променливата $app_config от глобалното пространство на имената за използване в тази функция. PHP глобалните, въпреки че са достъпни за всички функции, не са включени в пространството на имената на тази функция, докато изрично не поискате да бъде. Това е, което се случва с вас, вие използвате променливата, преди да сте я „поискали“.

person Bilal Akil    schedule 28.05.2012