我有对象$ obj(类A)。 我可以将$ obj的类转换为B吗? 也许还有另一种方式。
示例:
class A
{
public $AProp = 1;
public function &Convert($ATypeName)
{
// HOW?
return $this;
}
}
class B extends A
{
public $BProp = 2;
}
$obj=new A();
$obj->Convert("B");
print_r($obj->BProp);
我写了下一个解决方案,但这不好。 (看来您的帖子主要是代码;我添加了更多详细信息)
class A
{
public $AProp = 1;
public function &Convert($ATypeName)
{
$Result = new $ATypeName; // Create new object
$Result->AProp = $this->AProp; // Copy params...
return $Result;
}
}
class B extends A
{
public $BProp = 2;
}
$obj = new A();
$obj->AProp = 3;
$obj = $obj->Convert("B");
print_r($obj);
答案 0 :(得分:0)
u正在尝试使用类扩展的c ++方式。 php-way是这样的:
<?php
class A
{
protected $prop = 1;
public function getProp()
{
return $this->prop;
}
}
class B extends A
{
protected $prop = 2;
}
$obj=new A();
print_r($obj->getProp());
$obj=new B();
print_r($obj->getProp());
还介绍了后期的静态绑定-http://php.net/manual/en/language.oop5.late-static-bindings.php
<?php
class A
{
public static $prop = 1;
public function getProp()
{
return static::$prop;
}
}
class B extends A
{
public static $prop = 2;
}
$obj=new A();
print_r($obj->getProp());
$obj=new B();
print_r($obj->getProp());
答案 1 :(得分:0)
这是唯一的方法:
$obj = new B();
由于使用了继承,因此您可以访问所有类A
func和var,例如$this->Aprop