1

我正在尝试将值从静态数组复制到另一个类参数。所以,我不知道这是可能的,或者我只是在处理一个简单的错误。

class EstadosConstantes
{
    const NO_APLICA = 0;
    const LIBRE = 1;

    public static $celdas = array(
        self::LIBRE => array(
            'id' => self::LIBRE , 
            "estilo" => "libre"
        ), 
        self::NO_APLICA => array(
            'id' => self::NO_APLICA, 
            "estilo" => "no-aplica"
        ),
    );
}

这是另一个类:

class Reservacion
{

     public static $estados = array(
        \models\EstadosConstantes::LIBRE => \models\EstadosConstantes::$celdas[\models\EstadosConstantes::LIBRE],
    );

正如您在上面提到的,我想将 LIBRE 数组从类复制EstadosConstantesReservacion但如果我尝试该选项,我会收到此错误:

解析错误:语法错误,意外的 T_VARIABLE,在第 22 行的 /models/Reservacion.php 中需要 T_STRING

在哪里line 22

\models\EstadosConstantes::LIBRE => \models\EstadosConstantes::$celdas[\models\EstadosConstantes::LIBRE],

我只是将所有可能的值集中在 中EstadosConstantes,然后,每个类都可以复制所需的值。

4

2 回答 2

1

来自PHP 手册

因此,虽然您可以将静态属性初始化为整数或数组(例如),但您不能将其初始化为另一个变量、函数返回值或对象。

因此,你不能这样做,因为EstadosConstantes::$celdas是一个变量

或者,正如 Michel Feldheim 在评论中建议的那样,您可以在构造函数中初始化它,但它只有在创建实例后才可用

class Reservacion
{
    public static $estados;

    public function __construct() {
        self::$estados = array(EstadosConstantes::LIBRE => EstadosConstantes::$celdas[EstadosConstantes::LIBRE]);
    }
}

$reservacion = new Reservacion();

var_dump(Reservacion::$estados);
于 2013-03-03T22:04:42.827 回答
1

出色地,

这就是我的工作方式:只保留引用,而不是整个数组:

class Reservacion
{

     public static $estados = array(
        \models\EstadosConstantes::LIBRE
    );

然后,如果想要一个特定的值,我可以这样做:

$estilo = models\EstadosConstantes::$celdas[models\Reservacion::$estados[\models\EstadosConstantes::LIBRE]]['estilo'];
于 2013-03-05T20:26:52.753 回答