2011-08-08 8 views
0

ここにスパムや広告を掲載しようとしているわけではありませんが、私はこのコミュニティと喜んで自分のような質問に答える時間をあきらめる人々を大切にしています。 WolfAuthというCodeigniter用の認証ライブラリを構築しました。これは、今後の通知があるまで、すべてのデータベース対話のために現在DataMapperに依存しています。CodeigniterのDataMapper:モデルオブジェクトを一度インスタンス化して再利用することは可能ですか?

各関数は、現在、次の行に沿ってコードを使用しています。

$u = new User; 
$u->get_by_id($user_id); 

if ($u->exists()) 
{ 
    // Do user stuff here 
} 

私は、PHPはオブジェクトのインスタンス化をどのように処理するか完全にわからないんだけど、確かに50個の機能でこれを行うに加えて、パフォーマンスのために良いこと、そうでない場合はできませんが、不必要なオブジェクトのインスタンスを追加します。私が使用している各DataMapperモデルオブジェクトのグローバルインスタンス化を各機能で再利用することは可能ですか?

以下のようになります。

class Someclass { 

    protected $user; 
    protected $group; 
    protected $roles; 

    public function __construct() 
    { 
     $this->user = new User; 
     $this->group = new Group; 
    } 

    public function the_user($user_id) 
    { 
     $user = $this->user->get_by_id($user_id); 

     if ($user->exists()) 
     { 
      echo "The user exists!"; 
     } 
    } 

} 

アムは、私はここに非常にうるさいこと、または私が可能と私が構築されてきたように、このような大規模なライブラリのために物事を行うには、おそらくより良い方法何を求めていますか?

答えて

1

はい、PHPで引数としてオブジェクトを渡すことができます。あなたは、ユーザーが必要なとき

class Someclass { 

protected $user; 
protected $group; 
protected $roles; 

public function __construct() 
{ 
    $this->user = new User(); 
    $this->group = new Group(); 
} 

public function get_user($user_id) 
{ 
    if (empty($this->user->id)) 
    { 
     $user = $this->user->get_by_id($user_id); 
    } 
    else 
    { 
     $user = $this->user; 
    } 
    if ($user->exists()) 
    { 
     prove_user_exists($user); 
     return $user; 
    } 
    else 
    { 
     show_error('No User Found'); 
    } 
} 

public function prove_user_exists($user) 
{ 
    log_message('info', $user->id); 
} 

次に、あなただけ($ USER_ID)GET_USERを呼び出すことができます - ユーザがすでに発見された場合は、もう一度デシベルを呼び出す必要はありません。

関連する問題