在php中将静态值从一个类复制到另一个类

时间:2013-03-03 21:48:06

标签: php class static copy

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

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数组从EstadosConstantes复制到Reservacion类,但如果我尝试该选项,则会出现此错误:

  

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

line 22的位置:

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

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

2 个答案:

答案 0 :(得分:1)

来自PHP manual

  

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

因此,你不能这样做,因为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);

答案 1 :(得分:1)

那么,

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

class Reservacion
{

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

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

$estilo = models\EstadosConstantes::$celdas[models\Reservacion::$estados[\models\EstadosConstantes::LIBRE]]['estilo'];