2

私は、OOP mvc スケルトン/フレームワークの代替として手続き的に書かれたオープン ソース ソフトウェアを書き始めたところです。したがって、独自の OOP MVC フレームワークを作成することもできますが、本来の目的は、すべてを手続き的に行うことです。これは、学習目的と、新しいプロジェクトを行うときに DIY コードベースを準備するためのものです。私はまだ OOP に完全に精通しているわけではないので、この方法で行うことはその方向への一歩だと感じています。ただし、このプロジェクトの目的は手続き型の代替手段であるため、手続き型で記述する必要があります (OOP を使用するという回答を避けるために、この序文を付けています)。

書き始めた後、コードがグローバル名前空間を非常に汚染していることに気づきました(手続き型コードがそうするのと同じように)。

最初に、グローバル名前空間を汚染し、偶発的な名前の競合を最小限に抑えるという問題を解決するために、次のように使用される変数と関数にプレフィックスを付けることにしました。

$prefix_variableName = 'value'; prefix_functionName($var){ return $var; }

その後、これを行うためのより良い方法があることに気付きました。私には2つのアイデアがあります:

1: クロージャーのグローバル配列を作成します。このように、コードで設定した唯一のグローバルは単一の配列です..そのように..

$myApp = array(
    'var1' => 'value1',
    'var2' => 'value2',
    'function1' => function($var1){ return $var1; },
    'function2' => function($var2){ return $var2; }
//etc
);

2: すべてのファイルの先頭にグローバル コード用の名前空間を作成します..のように..

namespace myApp;

$var1 = 'value1';
function1($msg){ return $msg; }

これらのオプションの両方が可能ですか? 手続き型コードに名前空間を付けることはできますか? この状況に適した選択肢はどれですか? またその理由は? 他にオプションはありますか?

4

1 に答える 1

1

確かに、手続き型コードに名前空間を使用できます。ドキュメントをチェックして、それがどのように機能するかを確認してください: http://php.net/manual/en/language.namespaces.basics.php

衝突を防ぐために、常にコードに名前を付ける必要があります。クロージャーの配列を使用すると、ユーザーがグローバル配列の値を設定解除できるようになり、コードが呼び出し可能なエラーを予期するなど、望ましくない動作が発生する可能性があります。

于 2015-12-05T01:03:19.037 に答える