Можно ли определить статические переменные класса PHP с помощью функций?


Создание класса с такими переменными отлично работает:

class Example {
    public static $example = array('simple', 'example');
    // ... 
}

Но, если я использую функцию, при определении переменной я получаю ошибку unexpected '(', expecting ')':

class Example {
    public static $example = explode(' ', 'simple example');
    // ... 
}

Я попробовал это без ключевого слова static и все равно получил ту же ошибку. Можно ли использовать функции при таком определении переменных класса? Какова альтернатива?

Author: tereško, 2012-04-20

3 answers

Массив на самом деле не функция, а оператор литерал, поэтому он работает. Чтобы использовать функцию, просто сделайте это с помощью установщика или внешнего по отношению к классу:

class Example {
    public static $example = null;
    // ... 

    public static function setE($val) {
       self::$example = $val;
    }
}

Example::$example = explode(' ', 'simple example');

// or

Example::setE(explode(' ', 'nudder example'));
 2
Author: Kato, 2012-04-20 16:32:30

В соответствии с документация ( курсив мой):

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

 4
Author: mellamokb, 2012-04-20 16:31:14

Вы должны быть в состоянии сделать следующее,

Публичный статический $пример = новый массив ("простой", "пример");

 1
Author: Beenish Khan, 2012-04-20 16:31:21