如何为PHP的对象强制转换类?

时间:2019-03-06 10:20:21

标签: php class object

我有对象$ 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);

2 个答案:

答案 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