あなたはfetchAll()
メソッドの引数として名前を渡すことを検討しましたか?
class Email extends Model
{
protected $_name = 'zEmailz';
public function getResults()
{
$rows = parent::fetchAll($this->$_name);
}
}
すべての可能な反復が値を上書きし、それが困難な現在の値が何をしたいと一致することを確認することがあり、私は、静的にModel::$_name
を設定することをお勧めしません。これは、静的でインスタンス化されたメンバーを混在させる多くの落とし穴の1つです。
- 更新 -
が
あなたはソートの、fetchAll
呼び出しにオブジェクトを渡すことができます(と言う一種のB/I決して共同混在静的呼び出しでDI c)の依存性注入液:
// Calling code
$email = new Email();
// Do stuff with $email
$results = Model::fetchAll($email);
は次にモデルクラスは、次のようになります。
abstract class Model
{
public static function fetchAll($object)
{
$request = new ApiRequest();
return $request->get($object->_name);
}
}
- 更新#2 -
あなたのコメントに基づいて、データベースから行を取得し、OO API呼び出しを介して現在の値を参照できるようにプライマリオブジェクトを水和するメソッドを探しています。もし私があなただったら、ホイールを再発明するのではなく、Doctrineを見てください。 Doctrineでは、モデルクラスに直接関係する「テーブル」クラスとして知られているものがあります。たとえば、EmailTable.php
というファイルがあります。このクラスでは、必要なデータセットを返すカスタムメソッドを追加します。
これを自分のやり方でこだわりたいのであれば、fetchAll
メソッドを各子クラスに移動することもできます。それ以外の場合は親クラスに入れておくと厄介なものになります水和するすべてのオブジェクトのスイッチ/ケースブロック。
例(実証のみ):
class Email extends Model
{
protected $_name = 'zEmailz';
public static function fetchAll()
{
// However you pull rows from DB
while ($row = get_current_row) {
$email = new Email();
$email->setAddress($row['address']);
...
$emails[] = $email;
}
return $emails;
}
}
彼は間違いなく遅い静的結合を望む質問に基づいています。 –