2012-03-01 6 views
2

ちょっと整理してデータベース関連のphpファイルを自分のフォルダに移動するまで、私の小さなプロジェクトではうまくいっていました。その後、物事は奇妙になりました。Require_onceはすべての機能に影響しないようですか?

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

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

    echo "<pre>"; 
    var_dump($tasks); 
    echo "</pre>"; // program works fine this far. 

    $bm = getBiggestMonth(); // program breaks somehow during this function call. 

マイ:次のように開始し

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; 
} 

私は別のファイル(フォルダ)で別の関数を使用してこれらの関数を呼び出すために、:

私はここに二つの機能を使用しようとしています

変数は、そのようなPHPファイルにあります?

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

>

funtionの呼び出し順序を切り替えると、getBiggestMonth()は正常に実行され、もう一方は正常に実行されません。また、すべては、すべてのファイルが同じフォルダ内にあったときに正常に機能しました(関数はクラス内の静的関数でしたが、問題ではないはずです。同じ問題がここに続きます)。可変スコープがここでどのように異なる可能性があるか、そしてrequire_onceは他のものを世話するべきです。助けて?

答えて

1

require_onceを使用しているためです。これは構成を1回だけ含むだけです。 requireを使用するように変更して、期待通りに動作させることができます。再度

ますrequire_once()文は チェックファイルが既に含まれているかどうPHPを除く()が必要と同一であり、そのため、含まれていない場合 は(必要)。

あなたはgetEntries()関数のスコープにファイルにプルするrequire_onceを使用しています。 PHPはrequireのファイルを記録していますので、require_oncegetBiggestMonth()に呼び出すと、すでにgetEntries()に含まれています。既に含まれているので、ファイルを再度入力する必要はありませんので、変数をgetBiggestMonth()のスコープに入れないでください。

require_once変数とは関係ありません。現在のPHPプロセスに含まれているファイルを監視するだけです。

+0

しかし、既に要求されているので、再度要求する必要はありませんか? $ dbHostがgetBiggestMonth()にどのようにエコーされていないかはよくわかりません。なぜなら、変数がまだ存在しなければ、それらは必須で、そうであれば何もしないからです。だからそれは常にエコーする必要がありますか? – hannu40k

+0

私は上記の更新された答えでそれをさらに説明しようとしました。 – Treffynnon

+0

ああ!今、私は分かる。それはphp.net/manualに入れた方法よりも理解しやすいものでした。そして、実際には今、うまくいくようです、ありがとう! – hannu40k

1

getEntries()での復帰後のecho文は、復帰後に関数が終了すると明らかに機能しません。

関連する問題