12

PHPで基本的なフレームワークを作成しています。現在のページのデータをさまざまな関数に渡し、変更して保存できるようにしてから、ページに戻して表示する必要があります。元々は のようなグローバル変数にデータを格納することを計画していましたが、$GLOBALS['data']グローバルを使用するのは悪い考えだと思い始めています。そこで、代わりにシステムクラスに静的変数を入れて、 を使用してアクセスすることを考えていsystem::$dataます。それで、私の質問は、どちらがより良いでしょうか、そしてその理由は何ですか?

これ:

$GLOBALS['data'] = array();
$GLOBALS['data']['page_title'] = 'Home';
echo $GLOBALS['data']['page_title'];

またはこれ:

class system
{
    public static $data = array()
}

function data($new_var)
{
    system::$data = array_merge(system::$data, $new_var);
}

data(array('page_title' => 'Home'));
echo system::$data['page_title'];
4

3 に答える 3

14

グローバル変数と変数の間に違いはありませんpublic static。クラス変数の名前空間はわずかに改善されていますが、ほとんど違いはありません。どちらもいつでもどこからでもアクセスでき、どちらもグローバルな状態です。

たまたま、このテーマについて網羅的な記事を書いたところです

于 2012-11-09T15:35:18.420 に答える
0

それで、私の質問は、どちらがより良いでしょうか、そしてその理由は何ですか?

これをすべてグローバルに入れるのに問題があることはすでにお気づきでしょう。物事をクラスにカプセル化するためのいくつかの考えを開発しましたが。

それは良い出発点だと思います。最初にこれをより流暢にするために、料理にスパイスを追加しましょう。

$data = new ArrayObject(array());
$data['page_title'] = 'Home';

これで、データを含むオブジェクトを渡すことができるようになりました。$data必要な場所に渡すだけです。グローバルまたはグローバル静的変数は必要ありません。

ArrayObject独自の型で拡張することにより、後でその型をより具体的にすることもできます。

于 2012-11-09T15:55:32.013 に答える