Require_once не влияет на все функции? - PullRequest
2 голосов
/ 02 марта 2012

В моем маленьком проекте все работало нормально, пока я не решил немного почистить и переместил php-файлы, связанные с базой данных, в свою собственную папку. Тогда все пошло странно.

Я пытаюсь использовать две функции здесь:

function getEntries () {
    require_once("mysqliVariables.php");
    $mysqli = new mysqli($dbHost, $dbUname, $dbPwd, $dbName);           
    $sql = "statement...";
    $result = $mysqli->query($sql) or die($mysqli->error);

    echo $dbHost; // prints host
    return $result;
}

function getBiggestMonth () {
    require_once("mysqliVariables.php");
    $mysqli = new mysqli($dbHost, $dbUname, $dbPwd, $dbName);           
    echo $dbHost; // prints nothing! why?       

    $sql = "statement...";
    $result = $mysqli->query($sql) or die($mysqli->error); // this line does not run, of course.

    return $result;
}

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

<code>function listTasks() {      
    require_once("db/mysqliFunctions.php");

    // Get entries using mysqli.
    $tasks = getEntries();

    echo "<pre>";
    var_dump($tasks);
    echo "
"; // программа отлично работает. $ bm = getBiggestMonth (); // программа как-то прерывается во время этого вызова функции.

Мои переменные находятся в php-файле примерно так:

<?php   
$dbHost = "host";
$dbUname = "username";
$dbPwd = "password";
$dbName = "databasename";

?>

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

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Оператор echo после возврата в getEntries (), очевидно, не будет работать при выходе из функции после возврата.

1 голос
/ 02 марта 2012

Это потому, что вы используете require_once.Он будет включать конфигурацию только один раз.Вы можете изменить его на require, чтобы он работал так, как вы ожидаете.

Оператор require_once () идентичен require () за исключением того, что PHP проверит, еслифайл уже включен, и если это так, не включайте (требуйте) его снова.

Вы используете require_once, чтобы вставить файл в область действия функции getEntries().PHP хранит записи о файлах, которые были require d, поэтому, когда вы затем вызываете require_once в getBiggestMonth(), он знает, что он уже включен в getEntries().Поскольку он уже включен, он не требует повторного ввода файла, поэтому ваши переменные не попадают в область действия getBiggestMonth().

require_once не имеет ничего общего с переменными, он просто отслеживаетфайлы, которые были включены в текущий процесс PHP.

...