我有一個包含相當多的功能的輔助文件,但沒有「主」功能。這些輔助函數中的每一個都需要數據庫連接。爲了提高代碼的可維護性,我想把保存數據庫連接的變量置於全局狀態(任何函數之外),這樣每個函數都可以看到它,並且可以在它們的mysql調用中使用它。這裏是我的意思是:PHP全局變量的作用域
$path = $_SERVER['DOCUMENT_ROOT'];
$connection = $path . '/scripts/connection.php';
include ($connection); // this initializes the variable '$link'
function getLocation ($id) {
$sql = "SELECT name FROM Locations WHERE id=$id";
$result = mysqli_query($link, $sql);
if (!$result) { return -1; }
$row = mysqli_fetch_array($result);
mysqli_close($link);
return $row['name'];
}
function getGroupID($group_id) {
$sql = "SELECT id FROM Groups WHERE group='$group_id'";
$result = mysqli_query($link, $sql);
if (!$result) { return -1; }
$row = mysqli_fetch_array($result);
mysqli_close($link);
return $row['id'];
}
// and many other similar functions
我寧願不把每個函數內的全球三大行從那時起,我一遍又一遍地重複代碼,但這個方法有沒有全局範圍。我可能會考慮將$link
變量作爲參數傳遞,但這需要重構很多函數調用。我知道對這樣的全局變量有些皺眉,但在這種情況下,這是我最簡單的解決方案。另外,如果我用這個替換三條全局線: include '../scripts/connection.php'
我的代碼工作正常,但是後來我失去了一些相對引用的靈活性。我不明白爲什麼我在這裏發佈的代碼運行不同。
有沒有我可以在全球範圍宣佈這一$connection
變量的方法嗎?
謝謝。
你能不能把在那裏你現在把它定義變量'global'? – putvande
@putvande把全局置於定義站點並沒有幫助,你必須把它放在使用變量的函數中。 – Barmar
關於絕對路徑和相對路徑之間的差異,你是否重複了'$ connection'來查看它是否是你期望的路徑? –