OOPクラス(グローバル関数)以外の言語の機能を改善するために、ランダム関数をどのように編成しますか?
私はライブラリを見たことがありますが、特に十分な機能がない場合は、これが優れたソリューションであるとはまだ言えません。私は、人々がランダムなPHPおよびJavaScript関数をどのように編成するかに特に興味があります。
OOPクラス(グローバル関数)以外の言語の機能を改善するために、ランダム関数をどのように編成しますか?
私はライブラリを見たことがありますが、特に十分な機能がない場合は、これが優れたソリューションであるとはまだ言えません。私は、人々がランダムなPHPおよびJavaScript関数をどのように編成するかに特に興味があります。
グローバル名前空間で関数を宣言することは完全に避けようとしています。私がこれを行う非常にまれな機会は、たとえば、私のバージョンの PHP にはない関数のユーザーランド実装を追加するときです。
if(false === function_exists('lcfirst'))
{
function lcfirst( $str ) { /* ... */}
}
このような関数は、bootstrap ファイルに含まれる compatibility.php に入れることができるため、アプリケーション全体で使用できfunction_exists
、PHP バージョンが関数をネイティブにサポートした後、問題が発生しないことを確認します。
他のすべての関数については、最初に専用オブジェクトに移動できないかどうかを確認しようとします。通常、「ランダムな」関数は単に配置が間違っています。どのオブジェクトがユーティリティ関数を使用しているかを調べてから、そこにメソッドを移動できるかどうかを確認してください。たぶん、出てくるのを待っているスーパークラスがあります。Information Expert パターンも参照してください。
これらのメソッドを実行できるオブジェクトがない場合でも、一意の名前空間で 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
orを予約しています。common.php
(つまり、私のプロジェクトに固有のものではありません)。
これは、標準関数を多次元配列に拡張するようなもの、またはそのカテゴリに適合するものです。
プロジェクトを変更するときは、そのファイルを次のプロジェクトにコピーするだけで、どこにでも簡単に移動できます。次に、それがロード スクリプトにロードされていることを確認するだけで、言語の拡張に成功しました。
プロジェクト固有のものについてMisc
は、同時にプロジェクト固有の非常に奇妙な関数呼び出しを含むクラスを保持しています。
Javascript 関数についても、同じことが当てはまると想像できます。functions.js
またはタイプ ファイルを作成する場合global.js
は、おそらく同じロジックを使用できます。
私は常に、すべての非OOPコードであるLOLを配置できるヘルパークラスを使用しています。つまり、ヘルパーはまだOOであり、関数の代わりにメソッドがあり、さまざまなヘルパーで関数を整理できるという利点があります。StringHelper、DBHelperなどのように。
JavaScriptで、新しいファイルを作成し、それらをオブジェクトの下にグループ化します
global.js
:
/* Function definitions */
var myFunctions = new Object();
myFunctions.func = function () {
alert("hello");
}
同じアイデアをPHPにも使用できます。これにより、プログラムが大きくなったときに命名規則の競合を心配する必要がなくなります。
For Javascript, I've found that the first choice should be to integrate my utilities into jQuery. It's as easy as writing any other sort of function, and when things get more complicated it's great to be able to leverage the paradigm that jQuery imposes over everything (and over all my other page-specific code in the site).