在PHP5中使超类对象成为子类对象

在PHP5中使超类对象成为子类对象,php,subclass,superclass,Php,Subclass,Superclass,我的问题是,如何使用A的对象以最少的编码安全地创建B类对象 public function __construct(A $a){ parent::__construct(); $this->myProperty1=$a->getProperty1(); $this->myProperty2=$a->getProperty2(); $this->myProperty3=$a->getProperty3(); $this->myP

我的问题是,如何使用A的对象以最少的编码安全地创建B类对象

 public function __construct(A $a){

  parent::__construct();
  $this->myProperty1=$a->getProperty1(); 
  $this->myProperty2=$a->getProperty2();
  $this->myProperty3=$a->getProperty3();

  $this->myProperty4='some value';

 }
我错过什么了吗?这听起来像是你试图强迫OOP去做它不想做的事情,或者你在理解继承方面遇到了困难

类A中的每个公共或受保护的方法和属性都可以在类B中使用。可以直接引用它(如我的示例中所示),也可以使用parent::语法

编辑 (作者澄清了问题)

如果类A的属性是可访问的,那么您可以使用以下类似的方法将它们复制到类B中

class A
{
  public $property = 'Foobar';
}

class B extends A
{
  public function __construct()
  {
    echo $this->property; // Foobar
  }
}

既然B扩展了A,为什么不首先创建B呢?如果您需要初始化一些额外的属性,您可以像这样超越构造函数:

class B
{
  public function __construct()
  {
    $a = new A(); // Or however A is instantiated
    foreach(get_object_vars($a) as $key => $value)
    {
      $this->$key = $value;
    }
  }
}

如果这还不够好,那么您可能需要查看反射。

因为您已经覆盖了A的构造函数,B不会设置A的构造函数设置的属性@dnagirl在我的示例中,A没有构造函数。如果是这样的话,您只需要B的构造函数中的parent::_construct()。我想我也遗漏了一些东西。对不起,我的示例编写得很糟糕,现在我做了一些更改,$a不是我创建的,它实际上是从其他函数返回的,它的属性可能已经被更改了,可能与构造函数中初始化的不同,我的示例不是一个好的示例。实际上,$a是由一些不是我写的函数返回的,我不能修改它们。我得到了一个A类的对象,然后我想让它成为B类的对象。@bobo\uu clone()可能对你的情况有帮助。@Mike B在我的情况下应该如何使用\uu clone()?
class B
{
  public function __construct()
  {
    $a = new A(); // Or however A is instantiated
    foreach(get_object_vars($a) as $key => $value)
    {
      $this->$key = $value;
    }
  }
}
class B extends A {
    public function __construct(){
      parent::__construct(); //calls A's constructor
      $this->Bproperty='somevalue';
    }

}