0

私がやりたいことは、一連の属性を与えることができる静的ファクトリ関数を持ち、既知のクラスを拡張する以前に宣言されていないクラスのオブジェクトを返すことです。

基本的:

<?php
class foo {
  public $a;

  function increment($b = 1){
    $this->a += $b;
  }
}

function factory($name, $a){
  //returns an object of class $name that extends foo with $this->a set to $a
}

コードを書くと:

<?php
$bar = factory("bar",12);
$bar->increment(5);
print_r($bar);
if(is_a($bar, "foo")){
  echo "is a Foo";
}
$moo = factory("moo", 4);
$moo->increment();
print_r($moo);
if(is_a($moo, "foo")){
  echo "is a Foo";
}

私は得る: [編集]

bar Object
(
    [a] => 17
)
is a Foo
moo Object
(
    [a] => 5
)
is a Foo

しかし、これを行うために必要なコマンドをどこから探し始めればよいかわかりません。私のファクトリ関数では、 $name の値が親クラスを拡張するが、それを変更しないことを何らかの方法で宣言する必要があると思います。その後、新しい $name を構築します。そうすれば、型が異なるだけで、親クラスのすべての機能を持ちます。

4

1 に答える 1

1

PHPリフレクションAPIには、新しいクラスを抽出してビルドするために必要なメソッドがありますが、それを実行してインスタンスを作成する方法がわかりません。これがPHPUnitでのモックの動作方法であると確信しているので、私はその可能性を知っています。PHPUnitのさまざまなモックオブジェクト関連のクラスを調べて、いくつかのアイデアを入手することもできます。

そうは言っても、実際にメソッドを追加/オーバーロードしない限り、なぜこれを実行したいのでしょうか。オブジェクトのプロパティを使用したり、インターフェイスを使用したりしないのはなぜですか?ここでの目標は何ですか?

于 2010-02-04T22:04:21.683 に答える