私はここで学習モードにあり、PHPは非常に新しいので、コードサンプルを使用しています。ここでの「グローバル」の使用はご容赦ください。ただし、php変数のスコープについて理解したいと思います。
myGlobals.phpは次のとおりです。
<?php
global $db_server;
// other code not shown
?>
これがconnectToDb.phpです:
<?php
require_once 'myGlobals.php';
// no declared functions in this file, all inline code
$db_server = mysql_connect(.....);
mysql_select_db( "theDatabase", $db_server);
?>
addDbRecords.phpは次のとおりです。
<?php
require_once 'myGlobals.php';
// other inline code.....
doAddDeleteRecord($db_server);
function doAddDeleteRecord($db_server)
{
//global $db_server;
if( !mysql_query($query, $db_server))
{
// handle the error...
}
}
?>
これがindex.phpです:
<?php
require_once 'myGlobals.php';
require_once 'connectToDb.php';
require_once 'addDbRecords.php';
// this is simplified, just trying to show that everything in inline code
?>
ここに問題があります。doAddDeleteRecord($db_server)上記のファイルaddDbRecords.php内で呼び出すと、$db_server無効になります-nullになります-呼び出すmysql_query(.., $db_server, ...) と、これはエラーメッセージです。
「警告:mysql_query()は、パラメーター2がリソースであると想定しています。29行目のC:\ xampp \ htdocs\addDbRecords.phpでnullが指定されています。」
そこで、内部で「グローバル」宣言を使用してみdoAddDeleteRecord()ました(上記でコメント)-変更はありません。
それでも、のmysql_query(...)値がNULLの場合は失敗します$db_server。
mysql_connect(....)他のコードが(SELECTを使用して)データベースからすべてのレコードを正常に引き出し、既存のレコードがブラウザーに正しく表示されるため、動作がわかります。
$db_serverしたがって、私の意見では、「グローバル」で宣言されているという事実は、のスコープ$db_serverが一度mysql_connect(...)呼び出されるようなものであることを意味するはずです-すべてのファイルのファイルスコープで$db_server、データベースへの有効な接続になります。
私はphpスコーピングについてのみ学習しようとしており、OOADやその他のことについては学習しようとしていません(今のところ)。なぜ$db_server()ここでnullなのですか?