i´m in a proyect with yii php framework and in muy model i have a public static array with some constante as index like this:
const ESTADO_ACTIVA = 1;
const ESTADO_RECHAZADA = 2;
const ESTADO_ACEPTADA = 3;
public static $estados = array(
self::ESTADO_ACTIVA => 'Activa',
self::ESTADO_RECHAZADA => 'Rechazada',
self::ESTADO_ACEPTADA => 'Aceptada'
);
I need replace 'Activa' with this
const ESTADO_ACTIVA = 1;
const ESTADO_RECHAZADA = 2;
const ESTADO_ACEPTADA = 3;
public static $estados = array(
self::ESTADO_ACTIVA => Yii::t('category','Activa'),
self::ESTADO_RECHAZADA => Yii::t('category','Rechazada'),
self::ESTADO_ACEPTADA => Yii::t('category','Aceptada'),
);
When i try it i get this error:
Parse error: syntax error, unexpected '(', expecting ')'
I don´t understand what´s wrong. Thanks for all..
Using this Yii way (like in docs) i would create estados method:
const ESTADO_ACTIVA = 1;
const ESTADO_RECHAZADA = 2;
const ESTADO_ACEPTADA = 3;
public static function estados()
{
return array(
self::ESTADO_ACTIVA => Yii::t('category','Activa'),
self::ESTADO_RECHAZADA => Yii::t('category','Rechazada'),
self::ESTADO_ACEPTADA => Yii::t('category','Aceptada'),
);
}
This way you dont need to instantiate class.
EDIT: If you don't want to evaluate Yii::t
at each call, use cached version:
const ESTADO_ACTIVA = 1;
const ESTADO_RECHAZADA = 2;
const ESTADO_ACEPTADA = 3;
private static $_estados = null;
public static function estados()
{
if(null === self::$_estados)
{
self::$_estados = array(
self::ESTADO_ACTIVA => Yii::t('category','Activa'),
self::ESTADO_RECHAZADA => Yii::t('category','Rechazada'),
self::ESTADO_ACEPTADA => Yii::t('category','Aceptada'),
);
}
return self::$_estados;
}
With this approach Yii::t
calls are evaluated only once.
In PHP, you cannot initialize an array with non-constant expressions. Calling Yii::t
is such an expression, which means that you have to compute the final form of $estados
inside a method body.
For example, you could do that inside the constructor:
public static $estados;
public function __construct()
{
if (!self::$estados) {
self::$estados = array(
self::ESTADO_ACTIVA => Yii::t('category','Activa'),
self::ESTADO_RECHAZADA => Yii::t('category','Rechazada'),
self::ESTADO_ACEPTADA => Yii::t('category','Aceptada'),
);
}
}