【问题标题】:Copy static values from one class to another in php在php中将静态值从一个类复制到另一个类
【发布时间】:2013-03-03 21:48:05
【问题描述】:

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

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 中,然后每个类都可以复制所需的值。

【问题讨论】:

  • 嗯,按照我的理解,为您需要的值创建全局变量不是更容易。或者如果可能的话,一个全局数组?
  • 这里的坏处是\models\EstadosConstantes 必须保留该数组,因为该项目是使用这种结构开发的。我是该项目的另一个编码员
  • 嗯,您是否也尝试将 const 设为静态?
  • 更妙的是,你不能直接从EstadosConstantes派生出来吗?
  • @Leron,抱歉耽搁了,我的互联网连接中断了。但是,你给我一个好主意.. 将EstadosConstantes 转换为接口怎么样?

标签: php class static copy


【解决方案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);

【讨论】:

  • @Manix 可以在类构造函数中实现
  • 不一定是构造函数 - 可以是任何函数,例如public static function init(),这取决于类的使用方式,可能更合适。
  • @AD7six,这是一个不错的选择!我会把这个答案和你的结合起来。
【解决方案2】:

嗯,

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

class Reservacion
{

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

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

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

【讨论】:

    猜你喜欢
    • 2010-11-15
    • 2018-02-11
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    相关资源
    最近更新 更多