【问题标题】:php array object propertyphp数组对象属性
【发布时间】:2012-12-01 16:41:55
【问题描述】:

让我解释一下我的代码问题。这有效:

$multiarray = array(
    'multikey1' => '',
    'multikey2' => ''
);
$array = array(
    'key1' => '',
    'key2' => '',
    'key3' => '',
    'key4' => $multiarray 
);
print_r($array);

这不起作用:

class Array {

    public static $multiarray = array(
        'multikey1' => '',
        'multikey2' => '',
        'multikey3' => ''
    );

    public $array = array(
        'key1' => '',
        'key2' => self::$multiarray
    );
}

$array = new Array;

不幸的是,这不起作用。知道如何解决这个问题吗?

【问题讨论】:

  • 无法创建名为 Array 的类。已保留。
  • @bobthyasian,谢谢,但在我的真实代码中,我当然不会命名该类 Array,它只是作为示例
  • 为了将来参考,虽然总是很欣赏一个简短的例子,但尽量选择一个不包含无关错误的例子......

标签: php arrays object properties


【解决方案1】:

您无法将成员变量初始化为任何非常量,并且您正在尝试包含另一个数组作为成员变量,这需要运行时执行。

还要注意Array 类名无效,因为它与用于创建数组的保留字array 冲突。

来自the manual

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

解决方法是在构造函数中设置变量:

class Array2 {
    public static $multiarray = array(
        'multikey1' =>  '',
        'multikey2' =>  '',
        'multikey3' =>  ''
    );

    public $array;

    function __construct() {
        $this->array = array(
            'key1'  =>  '',
            'key2'  =>  self::$multiarray
        );
    }
}

【讨论】:

  • 感谢您的回答!我试图理解你的答案,但我不明白。你能说明一下你的观点吗?
  • @Orhan 类被认为是蓝图,它们的属性定义需要独立于任何运行时环境或变量。使用构造函数初始化要包含变量的属性(如答案中的 nickb 所示)。
猜你喜欢
  • 2014-09-22
  • 1970-01-01
  • 2010-11-10
  • 2018-11-12
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多