0

PDOを使用して行をオブジェクトにフェッチしています。それについて2つの質問があります:

1-オブジェクトでプライベートプロパティを使用し、getLabel()などの別の関数自体を呼び出す可能性のある__get()メソッドを使用してそれらを返す場合、これは多くのレコードを取得するときにphpのパフォーマンスにどのように影響しますか?それは受け入れられますか?

例:

class model
{
  private p1;
  public p2;
  function __get($name)
  {
    return $this->{'get'.$name}();
  }
  function getP1()
  {
    return '';
  }
}

$obj = new model;
$obj->p1 VS. $obj->p2

2-多くの列を持つクラスの場合、クラス定義でそれらすべての列を定義し、多くのレコードを取得するときにそれらのいくつかを選択すると、null値を持つオブジェクトで定義されるため、これはphpメモリ使用量にどのように影響しますか?それは受け入れられますか?

行を1つずつフェッチするのではなく、一度にすべてをフェッチするわけではありません。

例:

class model
{
  public $p1 = null;
  public $p2 = null;
  public $p3 = null;
  public $p4 = null;
  public $p5 = null;
  public $p6 = null;
  public $p7 = null;
  public $p8 = null;
  public $p9 = null;
  public $p10 = null;
}

sql: select p1, p2 from model limit 100

各オブジェクトには8つの未使用のプロパティがあります。これはPHPのパフォーマンスとメモリにどのように影響しますか?

私が知っている限り、教義はこれら2つのパターンを使用しています。PHPのパフォーマンスに影響を与えるこれをどのように克服しますか?

4

1 に答える 1

1

オブジェクトでプライベート プロパティを使用し、getLabel() などの別の関数自体を呼び出す可能性がある __get() メソッドを使用してそれらを返すと、多くのレコードを取得するときにこれが PHP のパフォーマンスにどのように影響しますか? それは受け入れられますか?

魔法の方法は、他の一般的な回避策と比較してコストがかかります。アプリケーションを見ずして、正確にどれくらいの費用がかかるかを言うのは困難です。

PHP での __get/__set/__call のパフォーマンスに関する質問

多くの列を持つクラスの場合、クラス定義でそれらすべての列を定義し、多くのレコードを取得するときにそれらのいくつかを選択すると、null 値を持つオブジェクトで定義されているため、php のメモリ使用量にどのように影響しますか? それは受け入れられますか?

PDO を使用して結果セットを反復処理する限り、メモリが高すぎることはありません。ただし、結果を反復処理してコレクションに保存すると、結果セット全体が大量のメモリを占有します。いつものように、できるだけ少ない数のフィールドと行を選択する必要があります。

于 2012-07-20T13:36:08.340 に答える