如何创建一个动态扩展类的工厂,以便其类型更改但它继承父方法?

时间:2010-02-04 21:56:13

标签: php oop inheritance dynamic factory-pattern

我想要做的是拥有一个静态工厂函数,您可以提供一系列属性,并返回一个对象,该对象是以前未声明的类,它扩展了已知的类。

基本上:

<?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";
}

我得到: [edit]

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

但我不知道从哪里开始寻找执行此操作所需的命令。我认为在我的工厂函数中,我需要以某种方式声明$ name的值扩展父类但不对其进行任何更改,然后构造一个新的$ name。这样它就具有父类的所有功能,只是一种不同的类型。

1 个答案:

答案 0 :(得分:1)

查看PHP反射API有你需要的方法来提取和构建新类,但是,如何去做,然后创建一个我不确定的实例。我确实知道它可能,因为我很确定这是Mocking在PHPUnit中的工作方式。您可能还想查看PHPUnit中的各种Mock对象相关类以获得一些想法。

除非你实际上是在添加/重载方法,否则你为什么要这样做呢?为什么不在对象中使用属性或使用接口?这里的目标是什么?