1

これは最も奇妙なバグです!おそらくばかげたものですが、修正方法がわかりません。誰かが助けてくれたら、私はとても感謝しています!3 つのファイルがあり、1 つは items.php と呼ばれ、もう 1 つは tableFunctions.php と呼ばれ、3 番目は mysql.php と呼ばれます。「mysql」と「tableFunctions」という 2 つのグローバル オブジェクトを使用します。それらは、それぞれ「mysql.php」および「tableFunctions.php」ファイルに保存されます。各ファイルで、そのオブジェクトのインスタンスを作成し、それをグローバル変数 $_mysql または $_table に割り当てます。このような:

ファイル mysql.php 内:

global $_mysql;
$_mysql = new mysql();

ファイル tableFunctions.php で:

global $_table;
$_table = new tableFunctions();

動作するはずの方法は次のとおりです。

items.php ファイルには tableFunctions.php ファイルが含まれています...これには mysql.php ファイルが必要なので、それも含まれています。

items.php ファイルでは、getTable() メソッドを呼び出します。このメソッドは、オブジェクト tableFunctions.(および変数 $_table.) に含まれています。次のように:

$t = $_table->getTable('items');

getTable 関数は、メソッド arrayFromResult() を呼び出します。このメソッドは、オブジェクト mysql.(および変数 $_mysql.) に含まれています。次のように:

$result  = $_mysql->arrayFromResult($r);

そこでエラーが発生します。PHP は、変数 '$_mysql' が未定義であると言っていますが、私はそれを 'mysql.php' ファイルで定義しました (上記を参照)。次のコードで mysql.php も含めました。

include_once 'mysql.php';

何が悪いのかわからない!誰かがそれを助けることができれば、それは大歓迎です。ソース ファイルは次のリンクからダウンロードできます: https://www.dropbox.com/sh/bjj2gyjsybym89r/YLxqyNvQdn

4

1 に答える 1

0

これはよくある間違いです。定義の代わりに必要なのは次の行だけです。

$_mysql = new mysql();

関数内で使用する場合は、グローバル変数として宣言する必要があります (それ以外の場合は、他の関数変数と同様に見なされます)。

global $_mysql;

たとえば、あなたの方法を取るとします。

function getTable($tableName) {         
        $r = mysql_query("SELECT * FROM $tableName");
            err($r, 'mysql returned null when getting table!');

        $result  = $_mysql->arrayFromResult($r);
        return $result;
    }

次のように変更する必要があります。

function getTable($tableName) {
        global $_mysql;
        $r = mysql_query("SELECT * FROM $tableName");
            err($r, 'mysql returned null when getting table!');

        $result  = $_mysql->arrayFromResult($r);
        return $result;
    }
于 2012-06-21T02:22:47.617 に答える