2013-03-03 2 views
1

Я пытаюсь скопировать значения из статического массива в другой параметр класса. Поэтому я не знаю, что это возможно, или я просто имею дело с простой ошибкой.Скопируйте статические значения из одного класса в другой в php

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 класса, но если я пытаюсь этот вариант я получаю эту ошибку:

Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING in /models/Reservacion.php on line 22

Где line 22 является:

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

Я просто один, чтобы централизовать все возможные значения в EstadosConstantes, а затем каждый класс мог скопировать требуемые значения.

+0

Хм, что я понимаю, не проще сделать глобальные переменные для нужных вам значений. Или глобальный массив, если это возможно? – Leron

+0

Плохо, что '\ models \ EstadosConstantes' должен хранить этот массив, потому что проект был развит этой структурой. Я еще один кодер проекта – manix

+0

Хмм, вы тоже пытались сделать свой const static? – Leron

ответ

1

От PHP manual

So while you may initialize a static property to an integer or array (for instance), you may not initialize it to another variable, to a function return value, or to an object.

Таким образом, вы не можете сделать это, так как EstadosConstantes::$celdas переменная

Альтернативно, как Мишель 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); 
+0

@Manix Вы можете сделать это в конструкторе класса –

+1

не обязательно быть конструктором - может быть любая функция, например. 'public static function init()', который, в зависимости от того, как используется класс, может быть более уместным. – AD7six

+0

@ AD7six, это хорошая альтернатива! Я объединю этот ответ с вашим. – manix

1

Ну,

Это, как я делаю это работает: Просто держать ссылки, а не весь массив:

class Reservacion 
{ 

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

Тогда, если хотите конкретное значение я могу сделать что-то вроде этого:

$estilo = models\EstadosConstantes::$celdas[models\Reservacion::$estados[\models\EstadosConstantes::LIBRE]]['estilo']; 
Смежные вопросы