Значение публичной статической переменной - PullRequest
6 голосов
/ 28 июня 2011

Я пытаюсь объявить открытую статическую переменную, которая является массивом массивов:

class Foo{
 public static $contexts = array(
    'a' => array(
      'aa'              => something('aa'),
      'bb'              => something('bb'),
    ),

    'b' => array(
      'aa'              => something('aa'),
      'bb'              => something('bb'),
    ),

  );

 // methods here

 }

 function something($s){
   return ...
 }

Но я получаю ошибку:

Ошибка разбора: ошибка разбора, ожидание `')' 'в ...

1 Ответ

9 голосов
/ 28 июня 2011

Вы не можете использовать выражения при объявлении свойств класса. То есть Вы не можете вызвать something() здесь, вы можете использовать только статические значения. В какой-то момент вам придется по-разному устанавливать эти значения в коде.

Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с использованием литерала или константы; выражения не допускаются. Поэтому, хотя вы можете инициализировать статическое свойство целым числом или массивом (например), вы не можете инициализировать его другой переменной, возвращаемым значением функции или объектом.

http://www.php.net/manual/en/language.oop5.static.php

Например:

class Foo {
    public static $bar = null;

    public static function init() {
       self::$bar = array(...);
    }
}

Foo::init();

Или сделайте это в __construct, если вы собираетесь создать экземпляр класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...