PHP:无法将Object分配给数组

时间:2012-02-28 10:02:00

标签: php arrays oop

我创建了以下类:

主类文件

class NativeTabs
{
    private $tabs = array();

    public function __construct()
    {
        require_once('/options_elements.php');
    }

    public function add_tab($key = '', $name = '')
    {
        // ...

        $this->tabs[$key] = $name;
        $this->tabs[$key][] = new OptionsElements();

        // ...

    }
}

$nt = new NativeTabs();
$nt->add_tab('tabname', "Tab Name");

options_elements.php文件

class OptionsElements
{
    public function __construct()
    {
    }
}

当我执行该代码时,我收到以下错误:

  

致命错误:在THE_LINE_THAT_CONTAIN_THE_CODE($ this-> tabs [$ key] [] = new OptionsElements();)

上的PATH / TO / MY / FILEnative_tabs.php中的字符串不支持[]运算符

为什么我无法在$this->tabs[$key][]中确定对象?

请问好吗?

5 个答案:

答案 0 :(得分:2)

你应该做

$this->tabs[$key] = array();
 $this->tabs[$key][] = new OptionsElements();

否则你使用带有字符串的[](你在上面一行分配了$this->tabs[$key] = $name;,所以$this->tabs[$key]是一个字符串)

答案 1 :(得分:2)

$this->tabs[$key]字符串,不是数组。

您无法将项目添加到字符串中,就像它是一个数组一样。

答案 2 :(得分:1)

你为什么要分配它?

$this->tabs[$key] = $name;

根据名称判断,您只需将数组元素设置为字符串即可。然后你尝试将一个数组元素附加到这个字符串?那不行。

答案 3 :(得分:1)

这样可以正常运行。

$this->tabs[$key] = array("name");
$this->tabs[$key][] = new OptionsElements();

答案 4 :(得分:1)

见内联。

$this->tabs[$key] = $name;
// $this->tabs[$key] becomes a string that contains $name
$this->tabs[$key][] = new OptionsElements();
// $this->tabs[$key][] has no meaning here as its neither array nor an unset value. 
// if it was unset or not declared PHP would have make it an array.

你可以做到以下几点。

$this->tabs[$key]['name'] = $name;
$this->tabs[$key]['option_elements'] = new OptionsElements();