首页 > 解决方案 > 返回其子类的新实例的方法

问题描述

使用 PHP 7,我想在超类(父)上创建一个方法,在子类(子)上调用该方法时,将返回子类的新实例。

我目前有我想做的工作,但我求助于 eval 并且我想避免它。您能否指出一种我可以以“更安全”的方式(即不使用 eval)来完成此操作的方法。

<?php

class _dbo{
    public $id=0;
    public $created=0;
    function getInstance(){
        $class = get_class($this);
        $statement="return new $class('noname','noemail');";
        return eval($statement);
    }
}
class person extends _dbo{
    public $name="";
    public $email="";
    function __construct($name, $email){
        $this->name = $name;
        $this->email = $email;
    }
}

$joe = new person("joe","joe@example.com");
$doe = $joe->getInstance();
var_dump($joe);
echo("<br>");
var_dump($doe);

代码可以在这里测试:http ://sandbox.onlinephpfunctions.com/(phptester.net不允许eval)

标签: phpoopinheritanceeval

解决方案


推荐阅读