2011-03-23 41 views
0

我注意到Interspire購物車將它的很多類初始化爲PHP的$ GLOBALS變量。這樣做時是否有任何性能或安全問題?

下面是一個僞造的文件,但類似於Interspire購物車的文件。

<?php 
// account.php 

$GLOBALS['USER_ACCOUNT'] = new USER_ACCOUNT(); 
$GLOBALS['USER_ACCOUNT']->createPage(); //creating the page 

?> 

我已經注意到,創建頁面的過程中(見上文),其獲得包括將需要訪問$ GLOBALS [「USER_ACCOUNT」]其他文件。所以這個類的實例將在後面的其他人需要。

+0

可能的重複:http://stackoverflow.com/questions/5166087/php-global-in-functions – igorw 2011-03-23 14:52:50

+0

它不完全重複上面那個,但肯定是相關的。 – 2011-03-23 15:30:18

+2

從我可以告訴上面的代碼,他們使用它作爲某種註冊表?這樣做可能是安全的,但它當然不是最好的方法之一。 – 2011-03-23 15:31:24

回答

2

執行此操作時是否存在任何性能或安全問題?

不,但這是不好的做法。在全球範圍內存儲數據可能是是設計不良的一個標誌。過多的全局變量是「代碼味道」,但我沒有從這個特定的用途中得到。在評論中提到

爲,他們似乎有濫用全局變量,而不是implementing the Registry pattern,其目的是允許正是這種類型的行爲沒有污染在全球範圍內

許多其他語言實際上並沒有變量的全局範圍,這意味着他們來使用註冊表(或類似的東西),而不是。 PHP恰巧使得做錯事變得容易。

使用註冊表而不是全局變量也可以使對代碼執行自動化測試更容易。