[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка в вызов массива в классе
Quieteroks
Здравствуйте.

В конструкторе класса запрашиваю сериализованный массив из файла, в последствии его использую как настройки.

Структура такая:

Array
(
[
bonus] => Array
(
[
type] => a
[stime] => 1346443200
[etime] => 1349035200
[bonsone] => 1000
[bonstwo] => 2500
[bonsthr] => 5000
)

[
start] => Array
(
[
f] => 2400
[p] => 1200
[r] => 1250
[t] => 150
)

[
end] => Array
(
[
f] => 40000
[p] => 22500
[r] => 8750
[t] => 1250
)

)


Грубо говоря все лежит в массиве класса $this->setting.
Когда обращаюсь к настройке бонусов, все в норме.
А вот когда динамически одним из методов класса генерирую start или end, у делаю ссылку на массив, у меня вместо массива выползает число 0.


// Результат getStage строка start или end
$array = &$this->setting[$this->getStage()];
// Распечатываем
print_r($array);
// Результат 0


Не подскажете, из-за чего может такое произойти?
Можно ли как то закрыть массив с настройками на изменение? Вдруг где то он переписывается ненароком... Хотя везде вроде получение и использование без изменения.



Спустя 45 минут, 14 секунд (16.09.2012 - 13:48) Dezigo написал(а):
Это не правильный подход.
Используйте get и set

http://php.net/manual/en/language.oop5.references.php

(Объект ВСЕГДА передаётся по ссылке )

Спустя 14 минут, 4 секунды (16.09.2012 - 14:02) Quieteroks написал(а):
Dezigo
В смысле магические __get и __set?
Или просто лучше функцию для получения массива из настроек написать по ключу?

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

Но сейчас попробую функцию доступа к настройкам сделать и посмотрю что она вернет.

Кстати, еще очень интересная анамалия, а может это нормально, но обращение к этому нулю как к массиву вполне срабатывает.

// Выведет 0, а не ошибку
echo $array['p'];



Вопрос закрыт. Все таки перезапись была.
Хотел как лучше, получилось наоборот.
Не всегда ссылки полезны.

Спустя 1 час, 9 минут, 57 секунд (16.09.2012 - 15:12) Dezigo написал(а):
Да, не заметил...
Всё должно работать

class Test {

public $array =
array(
"Test" => array("A" => "AAA","B" => "BBB"),
"WWW" => array("C" => "CCC","D" => "DDD")
);


public function doIt() {

$testArray = &$this->array['Test'];
print_r($testArray);
$testArray['V'] = "VVV";
print_r($this->array['Test']);
}

}


$test = new Test();
$test->doIt();
?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.