PHP数组不会分配键值

时间:2017-09-13 04:34:11

标签: php

更新:以下是完整的控制器方法:

M:\My_View\Documents\Data.doc

在我的Laravel控制器中,我有一个像这样的全局属性:

protected $game = [];

private function stageAction($type, $actions)
{
    if (env('APP_DEBUG')) {
        Log::info('STAGE ACTION started with $type= '.$type.' *********************');
    }

    $message                    = [];
    $this->game['sys_msg']      = [];
    $this->game['stage_action'] = [];

    switch ($type) {

        case 'attack_end':
            $message['action']  = 'ignore';
            $message['message'] = '<b>'.active_player()['nickname'].'</b> ends their attack.';
            $this->game['sys_msg'] = $message;
            break;

        case ......
            break;

        default:
    }

    // If it is an "ignored" message then send it now
    if ($this->game['sys_msg']['action'] == 'ignore') {
        $this->broadcastSysMsg();
    }

    if (env('APP_DEBUG')) {
        Log::info('SYS MSG - '.print_r($this->game['sys_msg'], true));
    }

在其中一种方法中,我像这样添加一个键:

protected $game = [];

然后我像这样添加值:

$this->game['sys_msg'] = [];

在代码的下面,我通过记录它的输出来检查它:

$message['action']  = 'ignore';
$message['message'] = 'My message is blah blah blah...';
$this->game['sys_msg'] = $message;

但我明白了:

Log::info('SYS MSG - '.print_r($this->game['sys_msg'], true));

我想为这个值分配一个对象数组。为什么这不起作用但没有失败?

2 个答案:

答案 0 :(得分:2)

我可以知道,这段代码

$this->game['sys_msg'] = [];

这是在此行之前还是之后?

$message['action']  = 'ignore';
$message['message'] = 'My message is blah blah blah...';
$this->game['sys_msg'] = $message;

答案 1 :(得分:2)

有几个问题,你没有iniaizlied $message,你刚刚开始在其中设置值。要么初始化它,要么更好,只需直接分配它,因为它会更快。

$message = [
  'action'  => 'ignore',
  'message' => 'My message is blah blah blah...'
];

您还可以更进一步,直接将其分配给game成员:

$this->game['sys_msg'] = [
  'action'  => 'ignore',
  'message' => 'My message is blah blah blah...'
];

至于您未能看到更新后的价值,可能是由众多因素造成的,请发布完整的代码示例。

编辑:

在看到您的代码示例之后,还有一些建议。

不要像你一样使用数组,为sys_msg创建一个类,这样你就不会冒{/ 1}}引发奇怪错误的错误。您还可以确保将其初始化为已知状态。例如:

aCtion