1

必要なことを正確に実行する長いスクリプトを作成しましたが、他のスクリプトで使用できるように、関数の有用性を確認しました。

私のスクリプトは、最初に書いた方法で完全に機能し、作成した関数を実装した方法でも完全に機能します。

私は関数を書くのが初めてで、これまでのように関数が実装されているのを見たことがないので、それが良い形であるかどうかはわかりません。

オリジナルの方法

foreach($get_prefixes as $prefix) {
    if($prefix['type'] == 'pre') {
        $sql  = "SHOW COLUMNS FROM `$prefix[table]` LIKE 'sku_%' ";
        $sku_cols = $objDb->query($sql);
        foreach($sku_cols as $col) {
            echo $col['Field'] . '<br>';
        }
    }
}

そして、作成した関数を使ってそれを行った方法があります。繰り返しますが、これは完全に機能しますが、これを行うための「適切な」方法はありますか?

function getSku_($table) {
    global $objDb;
    $sql  = "SHOW COLUMNS FROM `$table` LIKE 'sku_%' ";
    $sku_cols = $objDb->query($sql);
    return $sku_cols;
}

foreach($get_prefixes as $prefix) {
    if($prefix['type'] == 'pre') {
        foreach(getSku_($prefix['table']) as $col) {
            echo $col['Field'] . '<br>';
        }
    }
}
4

6 に答える 6

5

を除いて、関数に問題はありませんnaming。それは間違いではありません。ただ、その慣習は、abc_pqrまたはabcPqrまたはの名前に従うことであると理解してい_abcPqr (for private functions)ます。

編集:$get_prefixes foreachで使用する前に、関数で定義された場所も表示されません。どこから来たの?

foreach($get_prefixes as $prefix) { //This line

関数がクエリだけで異なり、2つの関数も必要ない場合は、クエリでinを使用する"sku"か(推奨)、2つの結果セットを分離する場合は2つのクエリを使用します。"sku "OR

于 2012-10-19T13:56:58.197 に答える
4

悟りを開いた人々の群衆へようこそ!あなたが正しい方向に進んだこの最初のステップは非常に重要なものです!

あなたの関数は正しいです、そしてそれはそれが書かれるべきであるように書かれています。

再利用可能でクリーンなモジュラーコーディングに向けたさらなる旅に力が加わりますように!(もっと多くの人がこれらのことの重要性を認識してくれることを願っています。)

于 2012-10-19T13:57:41.920 に答える
3

何も悪いことはありません。データベースから情報をフェッチする機能を分離し、関数を介してコード内でそれを使用します。それは私には問題ないようです。このようにして、コード内のどこからでも関数を呼び出すことができ、ループ内でのみ使用することに限定されません。

編集:関数名の下線は不要であるという前の回答に同意します。

于 2012-10-19T13:57:29.440 に答える
3

いくつかの名前の奇妙さを除いて、あなたのコードは問題ありませんが、あなたは新しいので理解できます。array_walkのようなものも調べて、2つのforeach()呼び出しを減らすことをお勧めします。

于 2012-10-19T14:01:17.083 に答える
3

見た目は良さそうですが、考慮すべき点として、「$ get__prefixes」をNULLにすることはできますか?その場合は、次のように「foreach」の前に「if()」を使用してその可能性を確認することも検討してください。

if ($get_prefixes != NULL) {
    foreach($get_prefixes as $prefix) { 
        ....
    }
}

これにより、潜在的なエラーを防ぐことができます。

于 2012-10-19T14:02:23.900 に答える
3

私はそれをこのように書くでしょう:

// Add code here...
function getSku($table) {
    global $objDb;
    $sql = "SHOW COLUMNS FROM {$table} LIKE 'sku_%';"; // Here be changes
    $sku_cols = $objDb->query($sql);  
    return $sku_cols;
}

なんで?元のバージョンは、次のような直接DBアクセスには対応していません。getSku( "schema.table"); そこで、`ラッパーを削除して文字列を囲みました。次に、次のようにラッパーにフィードします。

getSku('`table`'); // or
getSku('`schema`.`table`'); // or
getSku('table'); // or
getSku('schema.table');

これはより一般的な用途であり、それが関数の目的です。

于 2012-10-19T14:06:36.380 に答える