php将变量复制到类的扩展版本

时间:2013-12-17 18:02:11

标签: php extends

我有两个类,其中一个扩展另一个类:

class a{
    private $name;
    public function __construct(){

    }
    public function get($v){
        $this->name=$v;
    }
}
class b extends a{
    public $user;
}

在页面顶部我正在创建一个对象:

$a=new a();
$a->get(1234);

然后我正在从b类创建另一个对象。

$b=new b();

但我想将 $ a 的所有当前变量复制到 $ b 。所以 $ b 类的变量 $ name 的值为 1234

我该怎么做?

3 个答案:

答案 0 :(得分:1)

有充分的理由不这样做..

然而 - 使用序列化/反序列化的一些黑客可以使类的实例成为类b

function copyDown($obj, $newInstance) {
    $data = serialize($obj);
    $newData = preg_replace('~(^O:[0-9]+:)"([^"]+")~', '$1"' . $newInstance . '"', $data);
    return unserialize($newData);
}

$a = new ClassA();
$b = copyDown($a, 'ClassB');

但请注意,ClassB应该继承自ClassA

答案 1 :(得分:0)

b添加构造函数,该构造函数采用a类型的参数?

class b extends a{
    public $user;

    function __construct(a $a)
    {
         parent::__construct($a.name);
    }
}

答案 2 :(得分:0)

我认为如果你通过传递值来创建类b的对象,那么你可以访问类b中的类a的变量,因为类b正在扩展类a。

<?php
class a {
    private $name;

    public function __construct($v){
        $this->name=$v;
    }
}
class b extends a {
    public $user;
}

$b = new b(1234);

var_dump($b);
?>