0

Interspire Shopping Cartは、そのクラスの多くをPHPの$GLOBALS変数に初期化することに気づきました。これを行うときにパフォーマンスやセキュリティの問題はありますか?

以下は偽のファイルですが、InterspireShoppingCartのものと同様に書かれています。

<?php 
// account.php

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

?>

ページを作成するプロセス(上記を参照)内で、含まれる他のファイルが$GLOBALS['USER_ACCOUNT']にアクセスする必要があることに気づきました。したがって、このクラスインスタンスは、後で他の人が必要になります。

4

1 に答える 1

2

これを行うときにパフォーマンスやセキュリティの問題はありますか?

いいえ、しかしそれは悪い習慣です。グローバルスコープにデータを保存することは、設計が不適切であることを示している可能性があります。過度のグローバルは「コードの臭い」ですが、私はこの特定の使用法からそれを得ていません。

コメントで述べたように、レジストリパターンを実装する代わりに、グローバルを悪用しているようです。レジストリパターンは、グローバルスコープを汚染することなく、まさにこのタイプの動作を可能にするように設計されています。

他の多くの言語は、実際には変数のグローバルスコープを持っていません。つまり、代わりにレジストリ(またはそのようなもの)を使用する必要があります。PHPは、たまたま間違ったことを簡単に実行できるようにします。

グローバルではなくレジストリを使用すると、コードの自動テストを簡単に実行できるようになります。

于 2011-03-23T17:18:51.113 に答える