「ランダムユーティリティ機能」のエレガントな慣行[閉じました]
-
19-09-2019 - |
質問
どのようにして、すべてのOOPクラス(グローバル関数)の外に、言語の機能を向上させるために、あなたのランダムな機能を整理するのですか?
私は図書館を見てきましたが、私はまだあなたが十分な機能を持っていない場合は特に、これは、良い解決策であることに売られていませんよ。私は人々がランダムPHPとJavaScriptの機能を整理する方法に特に興味があります。
解決
私は完全にグローバル名前空間内の関数を宣言しないようにしてください。
たとえば、PHPの私のバージョンにはない機能のユーザランド実装を追加するとき、私はこれを行う非常にまれであり、if(false === function_exists('lcfirst'))
{
function lcfirst( $str ) { /* ... */}
}
このような関数は、ブートストラップファイルに含まれることになるcompatibility.phpに行くことができるので、彼らは、アプリケーションとfunction_exists
にあるチェックを通じて利用可能なPHPのバージョンがネイティブにサポートしていたら、私が問題に実行しないことを確認します機能のために。
他のすべての機能のために、私は彼らが最初に専用のオブジェクト上に行くことができないかどうかを試してみました。通常は、「ランダム」の機能は、単に見当違いです。あなたがそこにメソッドを移動することができますかどうか、あなたのユーティリティ機能を使用して、どのオブジェクトを見ています。多分出てくるのを待っているスーパーがあります。また、情報エキスパートパターンを参照してください。
これらの方法は上に行くことができます何のオブジェクトが存在しない場合は、することができますまだ一意の名前空間内の名前のUtilsの静的モジュールのグループにそれらをので、彼らがグローバル名前空間を散らかしていません。このように、あなたは、あなたがグローバルスコープ内の他のサードパーティの機能と衝突していないことを確認することができます。
5.3に先立ち、私は彼ら PEARの命名規則以下のグループをいただきたいです>、モジュールがcom/mattmueller/utils.php
にあった場合、あなたは
class Com_MattMueller_Utils
{
public static function something($a, $b) { /* ... */ }
}
はPHP5.3のように、我々が持っている本当の名前空間とあなたが行うことができます。
namespace com\mattmueller\Utils;
class Utils
{
public static function something($a, $b) { /* ... */ }
}
JavaScriptでは、あなたは、名前空間を持っていませんが、簡単にすることによって、それらををシミュレートすることができます例えば、オブジェクトに機能を追加する
// JavaScript
var com = (com) ? com : {};
com.mattmueller = {
'Utils': {
'something' : function(a,b) { /* ... */ }
}
};
一般的なフレームワークは、通常、がにも名前空間を作成するための機能を実現します。
他のヒント
私は一般的に理想的な最初の場所でPHPにされている必要があります私の奇妙な機能のすべてについてfunctions.php
またはcommon.php
を予約します。 (すべてではない、特定の私のプロジェクトへの意味)。
これは、標準関数は多次元配列、またはそのカテゴリに収まる何か他のものに拡張することのようなものにすることができます。
私はプロジェクトを変更すると、、私は次のプロジェクトに上でそのファイルをコピーし、それが簡単にどこ私と一緒に行くことができます。その後、私は念のそれは私のロードスクリプトにロードされていることを確認し、私は成功した言語を拡張しています。
<時間>は、プロジェクトの特定のもののために、私は、プロジェクトの特定、同時に、ある本当に奇妙な関数呼び出しが含まれているMisc
クラスを維持します。
Javascriptの機能のために、私は同じことを適用することができます想像することができます。あなたがfunctions.js
またはglobal.js
タイプのファイルを作成したい場合は、おそらく同じロジックを使用することができます。
私はオールウェイズ私がLOL、私のすべての非OOPのコードを置くことができるヘルパークラスを使用します。私はそれはまだOOいるヘルパーのpropourseだという意味では、あなたがdiferentヘルパーにあなたの機能を整理することができるという利点を持つ関数の代わりにメソッドを持っています。などStringHelper、DBHelper、同様ます。
Javascriptのために、私は最初の選択肢は、jQueryのに私のユーティリティを統合しなければならないことがわかりました。これは、関数の他の並べ替えを書くのと同じくらい簡単だし、物事をより複雑に取得するときには、jQueryのすべてのものの上に課しパラダイムを活用することができるのは素晴らしいことだ(と、サイト内のすべての私の他のページ固有のコードオーバー)。
JavaScriptでは、オブジェクトの下に新しいファイルやグループにそれらを作る
global.js
ます:
/* Function definitions */
var myFunctions = new Object();
myFunctions.func = function () {
alert("hello");
}
同じ考え方は、PHPのために使用することができます。これでは、あなたのプログラムが大きく成長したときに命名規則では、競合を心配する必要はありません。