【问题标题】:Are there some special rules to set a variable into a multidimensional array for php?是否有一些特殊规则可以将变量设置为 php 的多维数组?
【发布时间】:2014-06-26 20:42:46
【问题描述】:

好吧,我被难住了。我正在尝试将变量设置为多维关联数组,但我不明白为什么这不起作用。

class myClass
{
    private $someProblem = 'data_is_here';

    private $access_array = 
        array
        ('key1a' => array 
            (
                'key2a' => array('key3a' => 'data1','key3b' => 'data4', 'key3c' => $someProblem),
                'key2b' => array('key3a' => 'data2','key3b' => 'data5', 'key3c' => $someProblem),
                'key2c' => array('key3a' => 'data3','key3b' => 'data6', 'key3c' => $someProblem)
            )
        ...more array values here, same pattern...
}

在这个迭代中,我得到:

Parse error: syntax error, unexpected '$someProblem' (T_VARIABLE) in myclass.class.php on line 10

我尝试将 $someProblem 更改为常量、将其设为静态、将其设为公开等,但我总是在变量出现的位置出现错误(错误更改,但总是致命的)。

提前感谢您的帮助 - 特别是,请解释为什么它在 'key3a'=>'data1' 处没有失败,以及为什么如果我将 $someProblem 替换为 'data_is_here',它会起作用。

【问题讨论】:

  • 语法高亮显示你的错误。任何基本的文本编辑器都会这样做。
  • 可能是key3b后面的双单引号'',注意后面文字颜色偏移了
  • 'key3b'' 额外的单引号
  • 另请注意,您不能将类属性定义为变量值。所有类属性分配都需要是静态确定的。一旦你修复了上面提到的语法错误,这将是你的下一个问题。在这里阅读第一段php.net/manual/en/language.oop5.properties.php
  • 实际上-不是这样。这些是在我删除要在此处发布的实际数据时引入的。立即编辑

标签: php multidimensional-array variable-assignment


【解决方案1】:

除了报价问题,你不能在 php.ini 中做你想做的事情。根据class properties上的手册:

这个声明可能包含一个初始化,但是这个 初始化必须是一个常量值——也就是说,它必须能够 在编译时进行评估,并且不能依赖于运行时 信息以便进行评估。

因此,您不能使用变量将值分配给声明它的类属性。您需要在构造函数中执行此操作。

然后你不能使用$someProblem,你需要使用$this->someProblem

【讨论】:

  • 我看手册的意思是我不能使用变量——使用常量仍然会出错。通过 cmets,我假设常量也不能在这种情况下使用? (我现在正在研究构造函数-只是想更好地理解)-感谢您的帮助!
  • @SteveR 是的,不能在编译时评估常量,因为它可能来自完全不同的脚本或包含。
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 2019-09-16
  • 1970-01-01
  • 2011-09-04
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多