2014-09-07 2 views
0

Я использую 2 основных файла PHP для скриптов на своем веб-сайте. Это основное внимание уделяется доступу к данным из базы данных MySQL и к тех, которые содержат функции, необходимые для веб-сайта. В некоторых функциях (в файле функций) мне нужно вызвать функции из моего файла MySQL. Я не понимаю, как правильно требовать файлы, чтобы они могли использоваться, когда они необходимы.Как правильно требовать файлы PHP

include 'scripts/MySQL.php'; 
include 'scripts/functions.php'; 

В верхней части страницы (я использую функции непосредственно из обоих файлов). Тогда, когда мне нужно использовать функции MySQL в functions.php, функции MySQL равны нулю, если я не требую MySQL.php в верхней части файла functions.php, но если да, то я получаю эту ошибку: Fatal error: Cannot redeclare getUserInfo() (previously declared in .../scripts/MySQL.php:2) in .../scripts/MySQL.php on line 16. Это GetUserInfo (строка 2 является первой линией размещена, и линия 16 является последней):

function getUserInfo($steamID) { 
    $link = mysqli_connect(constant('DB_SERVER'), constant('DB_USER'), constant('DB_PASS'), constant('DB_NAME')); 

    /* check connection */ 
    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 

    $query = 'SELECT * FROM '.constant('membersTable').' WHERE steamID = '.$steamID; 

    if($result = mysqli_query($link, $query)) { 
     return mysqli_fetch_assoc($result); 
    } 
} 

Как require действительно работает с зависимостями между файлами? И почему мой код действует так странно/как его исправить?

Кроме того, если я хочу получить доступ к переменным из другого файла, должен ли я потребовать этот файл в каждой функции, использующей переменные, или я могу потребовать ее в верхней части файла, содержащего функции (последний не похоже, работают)?

Извините, если этот вопрос немного запутан. Я действительно не мог понять, как правильно описать мою проблему (особенно потому, что я не уверен, что сам понимаю проблему).

+1

Включаете ли вы файл из любого другого файла? Кажется, что вы включаете файлы более одного раза. Можете ли вы предоставить полный код? – Mindastic

+1

вы включили Mysql.php дважды, так как функции.php нуждается в доступе к нему, но это приводит к фатальной ошибке. Ответ, поставленный FuzzyTree 'require_once', должен исправить это. –

+1

Просто следуйте PSR-0, и вы будете в безопасности. – vinnylinux

ответ

3

использование include_once или require_once, чтобы избежать повторного объявления ваших функций

require_once 'scripts/MySQL.php'; 
require_once 'scripts/functions.php'; 

The require_once statement is identical to require except PHP will check if the file has already been included, and if so, not include (require) it again.

+1

не уверен, почему у вас есть нисходящий звук, хорошо звучит для меня –

+0

Но если я объявляю его дважды, чтобы получить фатальную ошибку, почему функции MySQL являются нулевыми, если я этого не требую? Это, похоже, противоречит предположению, что это уже было необходимо. – StrongJoshua

+0

Не включайте и не требуйте таких файлов. Ты будешь в чистом аду. Используйте реальные классы и правильную автозагрузку. Вот почему существуют такие стандарты, как PSR. Чтобы избавить вас от беспорядка, что программирование на PHP может быть. – vinnylinux

-2

Не делайте этого. Потратьте некоторое время, чтобы прочитать следующее:

http://www.php-fig.org/psr/psr-0/

http://www.sitepoint.com/php-dependency-management-with-composer/

http://nelm.io/blog/2011/12/composer-part-1-what-why/

https://phpbestpractices.org/

http://www.phptherightway.com/

Убедитесь, что вы следуете за всеми СКП.

+1

Это распространенный пример того, как правильный ответ ограничивается только для удовольствия. +1, чтобы исправить смещение – Yang

+0

К сожалению, тролли собираются троллировать. – vinnylinux