即使对象存储在数组中,两次调用对象也会覆盖以前返回的数据


calling an object twice overrides previous returned data even when objects are stored in array

我将多个对象存储到一个配置数组中。

例如像这个

class Test
{
    private $config = array();
    public function __construct()
    {
        $this->abc();
        $this->def();
    }
    public function abc()
    {
        $this->config['abc'] = new someClass('abc');
    }
    public function def()
    {
        $this->config['def'] = new someClass('def');
    }
    public function printTest()
    {
        return $this->config;
    }
}
class someClass
{
    public function __construct($value)
    {
        echo $value;
    }
}

我的问题是,当我打印配置变量时,我确实看到了对象数据。我不能理解的是,为什么在我尝试将第二个对象def存储到配置数组中之后,我不能回显第一个对象abc的值。

当您想要打印config['def']时,您需要表示这就是您想要的数据。现在

$this->config 

array('abc'=>'abc', 'def'=>'def')

你只是说

return $this->config['def'];  

就我个人而言,我觉得一个名为printSomething()的函数应该将数据打印到屏幕上(或者至少返回一个字符串,所以我会说

function printConfig()
{
    $tmp = "";
    foreach($this->config as $key=>$value)
    {
        $tmp .= "Config option:{$key} value is {$value}<br>";
    }
    return $tmp;
}