2012-03-01 3 views
2

조금만 정리하고 데이터베이스 관련 PHP 파일을 자신의 폴더로 옮기기 전까지 모든 작은 프로젝트에서 제대로 작동했습니다. 그러면 일이 이상해졌습니다. 이런 식으로 시작 내가 다른 파일 (및 폴더)이 함수를 호출하는 다른 기능을 사용Require_once가 모든 기능에 영향을 미치지 않는 것 같습니까?

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

: : 여기 두 가지 기능을 사용하려고

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. 

내 변수는 그래서 같은 PHP 파일에 있습니다?

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

>

funtion의 호출 순서를 전환하면 getBiggestMonth()가 정상적으로 실행되고 다른 호출은 실행되지 않습니다. 또한,이 모든 괜찮 았는데 때 모든 파일이 같은 폴더에 (함수는 클래스 내부의 정적 함수 였지만, 문제가 안된다, 동일한 문제가 여기에 지속), 그래서 난 이해가 안 돼 가능한 변수 범위가 여기서 어떻게 다른지, require_once가 다른 것을 처리해야합니다. 도움?

답변

1

require_once을 사용하고 있기 때문입니다. 구성은 한 번만 포함됩니다. 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 문은 반환 후 함수가 종료 될 때 분명히 작동하지 않습니다.