Есть массив: Код (Text): array (size=32) 0 => object(user_model)[12] private 'container' (model) => array (size=7) 'id' => string '11' (length=2) 'login' => string 'zxc' (length=3) 'name' => string 'zxc' (length=3) 'email' => string 'asd@sad.ru' (length=10) 'password' => string '$2y$10$SF5UZBbJnyJdRuNN6Z7kzO51FKioArN/GRrS6ZtoRivrjpCImdbWm' (length=60) 'role_id' => string '1' (length=1) 'role_name' => string 'admin' (length=5) 1 => object(user_model)[13] private 'container' (model) => array (size=7) 'id' => string '12' (length=2) 'login' => string 'йцу' (length=6) 'name' => string 'йцу' (length=6) 'email' => string 'asd@sad.ru' (length=10) 'password' => string '$2y$10$smY4xMpUqSqOkEd3/GT4g.8CUO0A1/7lZ79szV0y4Ds36D/ANqLzq' (length=60) 'role_id' => string '1' (length=1) 'role_name' => string 'admin' (length=5) 2 => object(user_model)[14] private 'container' (model) => array (size=7) 'id' => string '13' (length=2) 'login' => string 'zsd' (length=3) 'name' => string 'asd' (length=3) 'email' => string 'asd@sad.ru' (length=10) 'password' => string '$2y$10$HCTbW8lWn1Pse3KSJ36ek.dyQAH1NTw1Y/pEZ4WIW391/euqqt7Wy' (length=60) 'role_id' => string '1' (length=1) 'role_name' => string 'admin' (length=5) 3 => object(user_model)[15] private 'container' (model) => array (size=7) 'id' => string '14' (length=2) 'login' => string 'ad' (length=2) 'name' => string 'adf' (length=3) 'email' => string 'asd@sad.ru' (length=10) 'password' => string '$2y$10$vilVyP4VuWwBfgrs4TQfLu9hfXvLzbGrXTH5UdrisDYJ.QqHSNr5u' (length=60) 'role_id' => string '1' (length=1) 'role_name' => string 'admin' (length=5) находится он в переменной $users Код (PHP): foreach($users as $user) { var_dump($user); /* здесь выводится object(user_model)[12] private 'container' (model) => array (size=7) 'id' => string '11' (length=2) 'login' => string 'zxc' (length=3) 'name' => string 'zxc' (length=3) 'email' => string 'asd@sad.ru' (length=10) 'password' => string '$2y$10$SF5UZBbJnyJdRuNN6Z7kzO51FKioArN/GRrS6ZtoRivrjpCImdbWm' (length=60) 'role_id' => string '1' (length=1) 'role_name' => string 'admin' (length=5) */ foreach($user as $key => $val) { echo $key.' ======> '.$val; // здесь не выводится ничего, ошибки тоже нет } } собственно вопрос почему второй foreach не работает
а почему ошибка должна быть? попробуй напрямую обратиться - будет. а так - итератор получает список публичных свойство объекта - пустоту - и итерируется по ней - ноль раз. всё как и должно быть. кстати если бы оно и было публичным то цикл выполнялся бы единожды потому что в дампе же видно что там только одно (хоть и приватное) свойство которое уже в свою очередь является массивом.
Класс должен реализовывать ArrayAccess, если вы хотите, чтоб его экземпляры можно было индексировать. Вот простейший пример из моей практики: класс Config отвечает за то, чтобы считать настройки из базы данных. А потом для получения доступа к конкретной настройки его можно просто проиндексировать: Код (PHP): $max_post_len = $app->config["max_post_len"]; // вместо $max_post_len = $app->config->getOption("max_post_len");
"Hello world!" проще, чем facebook, нахуа тогда фейсбук?! ))) Интерфейсы полезны там, где действительно надо абстрагироваться от конкретной реализации. То есть, упрощенно говоря, когда у тебя есть несколько классов с одним интерфейсом. И этот интерфейс реально помогает выполнять некие общие для всех имплементаций действия. А пока класс один и не предполагается расширение, всё это выглядит как пустая трата времени и букв. Добавлено спустя 3 минуты 37 секунд: Кстати, самый простой способ внедрения ArrayAccess в проект — наследовать свой класс от ArrayIterator, который уже реализует ArrayAccess и другие вкусные интерфейсы.
это и должно было быть класс class model implements ArrayAccess и от него class user_model extends model забираем из базы Код (PHP): <span class="syntaxdefault"><br /> function get_res</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $model_arr </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[];<br /><br /></span><span class="syntaxdefault"> foreach</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">prepared</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fetchAll</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">PDO</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">FETCH_NAMED</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> as $arr</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $model </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> new user_model</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault"> foreach</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$arr as $key </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> $val</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $model</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$key</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $val</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /><br /></span><span class="syntaxdefault"> array_push</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$model_arr</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $model</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> return $model_arr</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /> </span><span class="syntaxdefault"></span> все заполняется, а вот обратно никак)) может заполняю неправильно?
http://phpfaq.ru/debug Добавлено спустя 7 минут 26 секунд: "Правильно"/"неправильно" зависит от цели. Я не понимаю смысла этой конструкции. Что ты хочешь вернуть? Массив объектов типа ArrayAccess. Я не вижу в этом смысла. Можешь пояснить? Покажи как ты хочешь использовать результат. Тогда будет видно что именно "неправильно". Добавлено спустя 12 минут 3 секунды: Кстати, посмотри описание метода PDOStatement::fetch с параметрами PDO::FETCH_CLASS или PDO::FETCH_INTO. Помоему сама цель не айс, но эти штуки делают в точности то, чего ты хочешь, вроде бы.
я хотел массив классов к которым можно обращаться как к массиву не $users[0]->id а $users[0]['id'] для того чтобы их можно было перебрать в цикле как в первом посте. собственно с arrayIterator массив получается как раз такой какой мне и нужен. с PDO::FETCH_INTO тоже попробую, похоже на то что нужно ЗЫ изначально целью было реализовать DataMapper, но сейчас у меня модель никуда не вписывается, классы моделей пустые т.е. есть класс model который реализует ArrayAccess и модели типа такой Код (PHP): <span class="syntaxdefault"><br /></span><span class="syntaxkeyword">class </span><span class="syntaxdefault">user_model </span><span class="syntaxkeyword">extends </span><span class="syntaxdefault">model<br /></span><span class="syntaxkeyword">{<br />}<br /> </span><span class="syntaxdefault"></span> отсюда в маппере и берется заполнение массива объектами класса user_model наверно я делаю что то не так ))
И как arrayaccess приближает тебя к datamapper? Я вижу только лишнюю зависимость. В то время как идея маппера в том, чтобы не накладывать на доменный объект никаких зависимостей.
ну я вообще думал что маппер нужен что бы отделить источник данных от модели, т.е. при изменении или добавлении источника данных нужно будет написать новый маппер, а модель как была так и останется и из какого источника ее будут заполнять ей без разницы