Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Не работа вывода элемента класса


Автор: NetJunky 19.7.2009, 15:12
Всем привет!
У меня возникла проблема.
Имееться класс для валидации данных. Он состоит из набора переменных и набора функций. Переменные получают значения по средсвам конструктора.

В конце класса имеется функция для создания асоциативного массива, такого вида:
Код

function controledData() {
    $this->data = array (
        "knimi_inv" => knimiCheckInv(),
        "knimi_empty" => knimiCheckEmpt()
    );
    return $this->data;
}


Р.С. Все вункции в асоциативном массиве возвращают значения boolean.

В другом файле, где создаёться экземпляр класса, имеется код для вывода того асоциативного массива.
Код

foreach($valid->controledData() as $key => $value) echo $key." => ".var_dump($value)."<br />";


Но по какой-то причине ничего не выводиться, а только происходит прерывание вывода в том месте.
Если же указывать значения в асоциативном массиве явно, то всё работает.

Подскажите в чём может быть проблема и как можно её решить если использовать в асоциативном массиве в роле значений функции, которые должны возвращать true или false.

Автор: lukas 19.7.2009, 17:19
По всей видимости у вас сервер вообще не выводит сообщения об ошибках, поэтому и такое тихое прирывание...

А по делу, использовать в foreach можно только массивы в переменных, результаты функций для перебора значений использовать нельзя.

Код

$tmp = $valid->controledData();
foreach($tmp as $key => $value)

Автор: NetJunky 19.7.2009, 17:28
lukas, тоесть как ключь, так и значение соответствующее, должны быть указаны явно?

Если, да, то как тогда можно сделать такой вариант чтобы возвраты из всех функций были в одном асоциативном массиве, чтобы имя функции ключь, а возвращённое значение этой функцией, есть значение ключа?
Подразумевается, что (все функции могут возвращать только true или false).

Автор: NetJunky 19.7.2009, 23:00
Up.

Автор: Sentox 20.7.2009, 06:48
Что показывает 
Код

var_dump($valid->controledData());

Автор: lukas 20.7.2009, 08:14
Цитата(NetJunky @  19.7.2009,  17:28 Найти цитируемый пост)
Если, да, то как тогда можно сделать такой вариант чтобы возвраты из всех функций были в одном асоциативном массиве, чтобы имя функции ключь, а возвращённое значение этой функцией, есть значение ключа?
Подразумевается, что (все функции могут возвращать только true или false). 


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

Автор: NetJunky 20.7.2009, 12:21
lukas, я работал тут уже с экзампляром класса и попробовал сделать следующее

Код

$data = array(
            'knimiCheckInv' => $valid->knimiCheckInv(),
            'knimiCheckEmpt' => $valid->knimiCheckEmpt(),
            'mailCheck' => $valid->mailCheck()
        );
        
        echo var_export($data);


В тамком случае выводом стало.
Код

array ( 'knimiCheckInv' => false, 'knimiCheckEmpt' => true, 'mailCheck' => false, )

Автор: krundetz 20.7.2009, 14:23
Цитата(lukas @  20.7.2009,  08:14 Найти цитируемый пост)
т.е. нужно явно подставлять только переменные-массивы

ты забыл про класс итератор
NetJunky, а вот эти функции
Код

knimiCheckInv()
......
knimiCheckEmpt()
......
mailCheck()

случайно не методы принадлежащие классу валидации данных?
если да то попробуй обращаться к ним вот так:
Код

$this->knimiCheckInv()
......
$this->knimiCheckEmpt()
......
$this->mailCheck()

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)