我目前在PHP中工作,並已開始利用類 - 我正在學習很多東西,但是我仍然有我的「便士下降」時刻 - 我正在努力與對象交互。PHP OOP-對象互動
我真的很感謝關於一個對象如何與另一個對象進行交互的一些澄清。作爲一個非常基本的例子,如果我有一個處理連接和查詢數據庫的數據庫對象,其他類應該如何訪問由數據庫對象執行的查詢結果?
從我的理解到目前爲止,我可以看到2個選項。無論是數據庫類內的查詢結果可公開訪問,並傳遞到其他對象作爲參數...
$databaseObject = new DatabaseObject;
$databaseObject->query("query goes here");
$newObject = randomObject;
$newObject->doStuff($databaseObject->query())
或依賴查詢結果的對象本身內實例化新的數據庫對象,因此該結果包含內目的。
class databaseConnection {
public $queryResults;
function __construct {
connect to database...
}
function query {
perform queries...
$this->queryResults = query results
}
}
class NewObject
{
function doStuff() {
$db = new databaseConnection
do stuff with $db->queryResults
}
}
選項1似乎錯了,因爲在數據庫中的類屬性是全球可用,而選項2似乎矛盾的類只能保存與它們定義對象的方法和屬性的想法。
我可以想到很多其他的例子。如果我創建一個負責在整個系統中管理用戶的類,那麼負責其他任務的類需要知道用戶擁有什麼特權級別,我是否在全局用戶類中創建該特性並將其傳遞給其他類?其他類是否實例化新的用戶對象?
任何幫助非常感謝。
閱讀有關依賴注入的內容 – bxN5
封裝是一個重要的OO概念。您不需要關心數據來自何處,您只需要從數據對象之外的數據中獲取數據,並讓它擔心數據的來源和方式。最簡單的解決方案是將結果作爲SQL行返回,但如果將其轉換爲關聯數組,則派生對象可以使用任何數據庫,xml文件,平面文件,curl call *,並且其他代碼都不會知道或關心哪一個*。 – Mike
我不是將查詢結果保留在數據庫對象中,而是從查詢方法中返回它。我有像queryArray,queryScalar,queryColumn和queryRow以不同方式返回結果集的方法,以及queryExec用於插入/更新/刪除語句。如果您需要一次訪問多個結果集,那麼在數據庫對象中保留結果會讓重複使用同一連接進行多個查詢變得很麻煩。 – reaanb