2015-04-27 4 views
3

Я пытаюсь сохранить информацию о файлах, которые будут переданы в бэкэнд, поэтому я создал одноэлементный класс со статическим массивом и статическими методами, обращающимися к массиву.Извлечение данных из одноэлементного класса PHP

Однако, когда дело доходит до получения данных, я просто получаю пустой массив. Где я здесь не так?

class FileStore { 

private static $_tempFileData = array(); 
private static $initialized = false; 

private function __construct() {} 

private static function initialize() { 
    if (self::$initialized) 
     return; 
    self::$initialized = true; 
} 

public static function storeTempFileData($data) { 
    self::initialize(); 
    self::$_tempFileData[] = $data; 
} 

public static function getTempFileData() { 
    self::initialize(); 
    return self::$_tempFileData; 
} 

public static function clearTempFileData() { 
    self::initialize(); 
    unset(self::$_tempFileData); 
} 
} 
+1

Можете ли вы вставить код, где вы храните массив и получаете его? – vanadium23

+0

Синглтон выглядит werid [Создание шаблона проектирования Singleton в PHP5] (http://stackoverflow.com/questions/203336/creating-the-singleton-design-pattern-in-php5) – cske

ответ

2

Прежде всего, это не одноэлементный, а статический класс. Синглтон предполагает создание экземпляра класса.

В вашем коде я вижу, что storeTempFileData добавляет значение к статической переменной, но getTempFileData не возвращает одно и то же значение - он возвращает массив.

Еще одна проблема - после того, как вы отменили self::$_tempFileData, это уже не массив. Итак, self::$_tempFileData[] = $data; вызовет уведомление.

В основном, я думаю, вам необходимо изменить self::$_tempFileData[] = $data; на self::$_tempFileData = $data;.

+0

правильно после первого очистить не будет работа no – cske

+0

Итак, если бы я хотел просто получить доступ к этому статическому массиву, добавьте элементы и извлеките массив, как это будет возможно? – user1724416

+0

Итак, вы действительно хотели, чтобы он возвращал массив, а не то, что вы устанавливаете в 'storeTempFileData'? Итак, в этом случае измените 'unset (self :: $ _ tempFileData);' to 'self :: $ _ tempFileData) = array()'. Кроме того, код кажется правильным. Пожалуйста, укажите пример кода, в котором вы используете этот класс, и он не работает должным образом. – astax

Смежные вопросы