私はここで学習モードにあり、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なのですか?