PHP新手:不能使用常量来定义数组

时间:2014-01-06 12:34:04

标签: php arrays constants

这很好用:

$entity->field_time[LANGUAGE_NONE][0] = array(
  'value' => date_format($date),
  'timezone' => 'UTC',
  );

但是我需要让它更通用,以允许不同的字段名称。所以我尝试使用常量:

define('FIELD_TIME', 'field_time');
$entity->FIELD_TIME[LANGUAGE_NONE][0] = array(
  'value' => date_format($date),
  'timezone' => 'UTC',
  );

但这不是针对正确的数组名称,应该是[field_time] [LANGUAGE_NONE] [0]

我也尝试过:

define('FIELD_TIME', 'field_time');
$entity->constant('FIELD_TIME')[LANGUAGE_NONE][0] = array(
  'value' => date_format($date),
  'timezone' => 'UTC',
   );

但是抛出:解析错误:语法错误,意外'['

我做错了什么?

4 个答案:

答案 0 :(得分:1)

试试这个

$entity->{FIELD_TIME}[LANGUAGE_NONE][0] = 'something';

是的,只需支持常数!这也适用于函数调用

$entity->{FUNC_NAME_CONST}();

答案 1 :(得分:0)

define('FIELD_TIME', 'field_time');
$entity->constant('FIELD_TIME')[LANGUAGE_NONE][0] = array(
  'value' => date_format($date),
  'timezone' => 'UTC',
   );

这种方式应该可行,但从PHP 5.4开始

否则你还需要一行:

define('FIELD_TIME', 'field_time');
$field_time = constant('FIELD_TIME');
$entity->$field_time[LANGUAGE_NONE][0] = array(
'value' => date_format($date),
      'timezone' => 'UTC',
       );

http://php.net/manual/en/migration54.new-features.php

  

添加了函数数组解除引用,例如FOO()[0]。


如果我理解正确,它应该用作:

class Entity {
    public $field_time = null;
}
$entity = new Entity();
/** 
* Instead of:
* $entity->field_time[LANGUAGE_NONE][0] = array('key' => 'val');
*/
define('FIELD_TIME', 'field_time');
$field_time = constant('FIELD_TIME');
// or $field_time = FIELD_TIME;
$entity->$field_time[LANGUAGE_NONE][0] = array('key' => 'val');

答案 2 :(得分:0)

您无法直接从方法的返回值访问数组。

$entity->constant('FIELD_TIME')[LANGUAGE_NONE][0]

错误,将constant()的返回值首先存储在另一个变量中,并通过该数组访问LANGUAGE_NONE。

答案 3 :(得分:0)

如果我理解你的好,你只需要使用常量来按名称调用正确的数组?

define('FIELD_TIME', 'field_time');
$entity->{FIELD_TIME}[LANGUAGE_NONE][0] = array(
  'value' => date_format($date),
  'timezone' => 'UTC',
  );

如果你有一个名为“field_time”

的声明数组,这对我来说很好