2017-01-10 17 views
0

OOPの初心者ですので、ベストプラクティスを理解しようとしています。このコードは、私が追加している既存のスクリプトに基づいています。この質問とベストプラクティスMVCとPHP関数を持つOOP?

スレッドの大半は、ようにコーディングするポスターを伝える:

function ($arg1, $arg2){ 
//some code 
} 

およびコール:

function($a1, $a2); 

を私はOOPベースの機能(働き)を持っていますが、それはdoesnのかなりうまく見えて、私はそれを提案された方法として呼び出そうとすると、次のようになります。

配列から文字列への変換....オンラインで配列

ここで出力を収集し、私の(作業)関数です:これは、作業(醜い)です

public function getMail($type, $id = 0) { 
     $query = $this->db->query("SELECT * FROM km_mail WHERE id = '" . (int)$id . "' AND `type` = '" . $this->db->escape($type) . "'"); 

     foreach ($query->rows as $result) { 
      $mail_data[$result['title']] = $result['value']; 
     } 

    return $mail_data; 
} 

一部 - これは、要求されたデータベースの列を返します(ただし、間違って見える?):

$this->model_setting_mail->getMail('order')['update_link']; 

私はそうのような列を要求しようとすると、文字列変換エラーに配列が発生します。

$this->model_setting_mail->getMail('order','update_link'); 

私の例では、$ idが渡されない限り、の順 = $ type、update_link = $ result ['value']と$ id = 0がデフォルトです。

+0

パフォーマンスの一部については、何かを取り出して配列を作成すると、すべてのデータベースエントリがメモリに格納されます。これは、エントリがたくさんあり、メモリの制限が十分に高くない場合に問題を引き起こす可能性があります。出力を直接操作する方が良いでしょう。 – Stony

+0

ありがとうございます、この表は約30ほどの行しかなく、成長しません。知っておくと便利です! – necrodeus

+0

それは大きな問題ではありませんが、もしあなたが何千ものエントリーを持っていて、リンゴがあなたの記憶限界を超えて実行し、サイトがオフラインである可能性があるならば。しかし、30のエントリは問題ではありません。 – Stony

答えて

1

最初に示す例は、関数から返された値から配列要素を選択する簡単な方法です。

$result = $this->model_setting_mail->getMail('order'); 
print $result['update_link']; 

2番目の例では、関数に2つの値を渡している。

$this->model_setting_mail->getMail('order')['update_link']; 

は同じです。

これらは全く異なっています。

+0

ああ、私は見る!それで、なぜ同じように動作しないのかを説明します。ありがとう、それは事をはるかに明確にする!私の現在の方法はこれを行う最も効率的な方法ですか? – necrodeus

+0

あなたはループ全体を避け、$ query-> result();を返すこともできます。たぶん私は完全にあなたのループを理解していないが、余分なようだ。 –

+0

私は基本的にテンプレートをフィードする特定の列のデータベースを照会しようとしています。 $ query-> result()ヒントをありがとう。私が自分の足をさらに濡らすと、私は自分がしていることをよりよく理解したらこのコードを最適化しようとします。 – necrodeus

関連する問題