【发布时间】:2014-01-06 12:34:03
【问题描述】:
这很好用:
$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',
);
但这会抛出:解析错误:语法错误,意外'['
我做错了什么?
【问题讨论】:
-
"常量的值;只允许标量和空值。标量值是整数、浮点数、字符串或布尔值。可以定义资源常量,但不建议这样做,可能导致不可预知的行为。"
-
@Flosculus 他不想使用常量作为数组,但它是值。假设您有一个属性(数组)=
public $_arr = array(...);的类,并且在另一个文件中define('BLA', '_arr');。 OP 想做$obj->_arr = ...但使用常量值 =>$obj->BLA = -
如果
FIELD_TIME是类的常量,不应该像EntityClass::FIELD_TIME一样静态访问吗? -
@Flosculus 它是一个文件的常量,而不是实例化类。你有
class Entity { public $field_time = null; } $entity = new Entity(); define('FIELD_TIME', 'field_time'); -
啊,我明白了。不过好像有点偏了。如果类的属性需要动态创建,那么类似 Doctrine 的
ArrayCollection甚至老式的魔法不是更合适吗?