2010-09-01 6 views
7

Ich bin ein PHP-Neuling (aber lange Zeit Entwickler in anderen Sprachen) und ich versuche einige Beispiel Db-Verbindungen in "PHP, MySQL, & JavaScript". Es zeigt eine Beispieldatei, die DB-Verbindungsvariablen (Servername, Benutzername, Passwort, Datenbank usw.) enthält. Ich habe eine PHP-Datei, die eine Handvoll Funktionen hat, die ich geschrieben habe, und eine von ihnen hat ein paar SQL-Abfragen. Aus irgendeinem Grund gibt der Aufruf von require_once in dieser Datei keine Fehler aus (ich habe E_ALL config'd), aber diese Variablen in meiner php-Datenbank sind null.Verwenden Sie Require_once(), um Datenbankverbindungsvariablen korrekt einzuschließen

Ich habe ein Echo mit allen Variablen innerhalb dieser Funktion aufgerufen, um zu sehen, was los ist, und natürlich druckt es eine Leerzeile. Was in der Welt ist außerhalb des Geltungsbereichs? Ich muss etwas Einfaches vermissen.

Hier ist ein Beispiel dafür, was ich tun

db_login.php

<?php 
    $db_server = 'localhost'; 
    // .... 
?> 

functions.php

<?php 
    require_once('db_login.php'); 

    function myfunction() { 
     echo "$db_server"; 
     // ... 
    } 
?> 

Rufen Sie mich an verrückt, aber sollte das nicht einfach genug sein, um zu arbeiten?

Antwort

5

Die Variablen, die Sie in db_login.php erklären Globals sind. Um auf sie in Ihrer Funktion zuzugreifen, müssen Sie die Variable $GLOBALS verwenden, z. $GLOBALS['db_server'], oder deklarieren Sie sie als global innerhalb Ihrer Funktion mit dem Schlüsselwort global, z. global $db_server.

7

PHP hat nicht function scope wie Javascript, so dass Sie keinen Zugriff auf die Variablen in db_login.php innerhalb der Funktionen von functions.php.

Es gibt mehrere Möglichkeiten, damit umzugehen. Aufgrund Ihrer wahrscheinlichen Verwendung des Servernamens wäre global wahrscheinlich eine gute Lösung, da sich nichts ändern kann.

In Ihrem Fall können Sie tun:

<?php 
    require_once('db_login.php'); 
     // You have access to $db_server here. 
     // Create a constant. 
    define("DB_SERVER", $db_server); 

    function myfunction() { 
      // Using a constant. Note that there is no "$". 
     echo DB_SERVER ; 
      // Constants are interpreted inside double quotes too 
     echo "\nMy constant is DB_SERVER"; 
     // ... 
    } 
?> 

In Ihrem Fall die Servernamen als Konstante wahrscheinlich geeignet sind. Wenn Sie mit etwas zu tun, die Sie als eine echte Variable behandeln möchten, können Sie die Variable in der Funktion nach Wert oder einen Verweis:

myfunction($variable); 

    // by value 
function myfunction($pass_variable_to_me_by_value) 
{ 
    echo $pass_variable_to_me_by_value; 
    // ... 
} 

function myfunction(& $pass_variable_to_me_by_reference) 
{ 
    echo $pass_variable_to_me_by_reference; 
    // ... 
} 

Als Hinweis, in Ihrem Fall, mit der global Schlüsselwort oder das $GLOBALS Array innerhalb einer Funktion ist essentially the same as passing by reference., aber wenn Sie nicht aus dem globalen Bereich übergeben, können sie sehr unterschiedlich sein (in einer Klasse oder von einer anderen Funktion zum Beispiel).

Verwandte Themen