PHP: Невозможно назначить объект массиву - PullRequest
1 голос
/ 28 февраля 2012

Я создал следующий класс:

Файл основного класса

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()
    {
    }
}

И когда я выполняю этот код, я получаю следующую ошибку:

Неустранимая ошибка: оператор [] не поддерживается для строк в PATH / TO / MY / FILEnative_tabs.php в строке THE_LINE_THAT_CONTAIN_THE_CODE ($ this-> tabs [$ key] [] = new OptionsElements ();)

Почему я не могу задеть объект в $this->tabs[$key][]?

Есть идеи, пожалуйста?

Ответы [ 5 ]

2 голосов
/ 28 февраля 2012

Вы должны сделать

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

, иначе вы используете [] со строкой (вы присвоили $this->tabs[$key] = $name; в строке выше, поэтому $this->tabs[$key] - строка)

2 голосов
/ 28 февраля 2012

$this->tabs[$key] - это строка , а не массив.

Нельзя добавить элемент в строку, как если бы это был массив.

1 голос
/ 28 февраля 2012

См. Inline.

$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();
1 голос
/ 28 февраля 2012

Это будет работать без ошибок.

$this->tabs[$key] = array("name");
$this->tabs[$key][] = new OptionsElements();
1 голос
/ 28 февраля 2012

Почему вы можете назначить это?

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

Судя по названию, вы просто установили элемент массива в строку. Затем вы пытаетесь добавить элемент массива к этой строке? Это не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...