首先:這個問題是不是重複。這是爲什麼。我之前關於這個話題的問題被關閉,作爲this(所有事情)的重複。這毫無幫助 - 我不明白這該死的東西。我對OOP完全陌生 - 我需要一個適合我的理解水平的答案 - 我不知道關聯問題的答案是在說什麼。僅僅因爲問題出現似乎是相似的,提問者可能不會 - 我在之前的問題中特別要求對我的理解水平有一個「可理解的」答案。所以,我會再問一次(如果需要的話,再次提問)。這裏所說:避免在PHP中使用全局數據庫處理程序變量,面向面向對象PHP的新手?
我還是相當新的PHP的整體,甚至是新的,以面向對象的PHP,纔剛剛開始它自己的教育在過去的一週內,有,我仍然無法掌握的一些概念比如繼承和什麼類抽象 - 其中一些我可以合理快速地獲得,因爲我一直在使用PDO處理我的數據庫連接和查詢一段時間,但除此之外,我仍然是一個新手在OOPHP,如果我的問題看起來有點「基本」,請耐心等待。
我得在每個我的網頁,其中,除其他事項外,連接到使用PDO作爲這樣一個MySQL數據庫的頂部所需的初始化文件(的init.php):
try { $dbh = new PDO(conn. data here); } catch(PDOException $e) { echo $e->getMessage(); }
所以,據我瞭解,在執行此代碼時,$dbh
現在被實例化爲一個PDO對象。在我的init.php文件的底部是很多需要鏈接到功能文件,如user.func.php
,images.func.php
等
問題是每當我需要從我的一個函數內查詢數據庫,我需要聲明$dbh
作爲一個全球性的,我能夠操縱它,像這樣前:現在
function myFunction { global $dbh; // Here's the problem! try { $stmt = $dbh->prepare(Some SQL here); $stmt->execute(); } catch { // etc. } }
,這個問題是不是我的爲什麼我必須聲明爲一個全球性的理解 - 我明白了,但我怎樣才能避免它。我已經閱讀了一些關於爲什麼要避免全局變量的StackOverflow答案,我只是不確定如何。
我該如何去除我的代碼中的global $dbh
?我是否會創建一個數據庫處理程序類,並在每次實例化它並使用它時將我的連接設置傳遞給構造函數方法? (看起來有點多餘)。
不知道如何替換我使用的全局變量,所以幫我理解,絕對讚賞!
事實上,你不明白問題的答案並不意味着你的問題不是重複的。但是,您現在至少有一個答案可以幫助您。祝你好運。 – vascowhite 2013-03-27 06:08:11
@vascowhite誠然,但即使如此,我和他的問題之間的關係似乎還是非常脆弱。我想知道如何在代碼中的函數中停止使用全局變量,他想知道如何正確設置PDO連接。如果有人能夠就我的問題回答我的問題,請賜教,我將不勝感激!謝謝。 – ReactingToAngularVues 2013-03-27 06:20:10