[英]Declare Database table names with $GLOBALS in php
問題
我正在使用$GLOBALS[]
變量在我的php文件中定義數據庫中表的名稱,以使更改表名稱變得簡單,並具有通用性/舒適性。 但..
我聽說使用$GLOBALS[]
有點不好。
因此,它是這樣發生的:
數據庫中的表
Users
Orders
Products
其實有10-20張桌子...
global_vars.php
<?php
$GLOBALS['t_users'] = 'Users';
$GLOBALS['t_users'] = 'Orders';
$GLOBALS['t_users'] = 'Products';
//...
//etc.
?>
現在,當我需要從網站的不同頁面並出於不同目的訪問數據庫時,我會這樣做:
function GetUsers(){
$sql = "SELECT * FROM $GLOBALS[t_users]";
// ...execute
}
function Get_OneUser($id){
$param['id'=>$id];
$sql = "SELECT * FROM $GLOBALS[t_users] WHERE id=:id";
// ...etc
}
function Get_Orders(){
$sql = "SELECT * FROM $GLOBALS[t_orders]";
// ...etc
}
function Get_OrdersB(){
$sql = "SELECT * FROM $GLOBALS[t_orders] WHERE id=:id";
// ...etc
}
function Get_Products(){
$sql = "SELECT * FROM $GLOBALS[t_products]";
// ...etc
}
// -- AND SO ON, AND SO ON........
想象一下,有一天我將需要重命名表/更改數據庫。 然后,(這種結構),我只能改變一個行global_vars.php ..這將是完美的!
一般問題
有什么更好的方法呢?
為什么這是/不是好/壞? 幫我弄清楚! 謝謝!
這已經在StackExchange上被詢問了很多次!
在這里看看答案,這將解釋原因。
PHP中的全局變量是否被視為不良做法? 如果是這樣,為什么?
閱讀依賴注入(使用Pimple!)。 使用依賴注入,您可以在一處定義所有內容,然后在構造函數中傳遞所需的內容,或在類中使用setter。 DIC(依賴項注入容器)也可以創建工廠方法來設置這些東西。 這樣您就可以以更少的風險獲得所需的收益。
TL; DR:是的,但這取決於您要改進的地方。
第一個問題是全球狀態。 在PHP中, $GLOBALS
屬於組構造,稱為“ superglobals ”,它們創建的問題與global
變量基本相同。
將表名保存在單獨的配置文件中的一般想法是一個好主意,但建議對它們的結構稍作不同:
數據映射器是類,負責與持久性進行交互(通常是數據庫)。 實現細節可能有所不同,但是我實現它們的方式的用法最終看起來像這樣:
$book = new Book;
$book->setId(51);
$mapper = new BookMapper($pdo, $config);
$mapper->fetch($book);
if ($book->getReleaseDate() < TWO_MONTHS_AGO) {
$book->setDiscountPercents(30);
}
$mapper->store($book);
有關更多“實用”代碼,您可以嘗試查看此類 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.