Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2013, 01:22   #1
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Радость Перебор свойств класса и присвоение им значения в цикле PHP

Здравствуйте

Вот столкнулся с такой проблемой. Нужно как-то приведенный ниже код организовать в цикле. Подскажите как это сделать.

PHP код:
    $this->id $arr_temp[0]['id'];
    
$this->name $arr_temp[0]['name'];
    
$this->date_birth $arr_temp[0]['date_birth'];
    
$this->franchise $arr_temp[0]['franchise']; 
Заранее очень благодарен
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 16.04.2013, 07:10   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 3,887
По умолчанию

Код:
for ($i=0;$i<10;$i++) {
  $this->id = $arr_temp[$i]['id'];
    $this->name = $arr_temp[$i]['name'];
    $this->date_birth = $arr_temp[$i]['date_birth'];
    $this->franchise = $arr_temp[$i]['franchise']; 
}
цикл с 1 по 10 ....не?
ADSoft вне форума Ответить с цитированием
Старый 16.04.2013, 17:58   #3
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание

Цитата:
Сообщение от ADSoft Посмотреть сообщение
Код:
for ($i=0;$i<10;$i++) {
  $this->id = $arr_temp[$i]['id'];
    $this->name = $arr_temp[$i]['name'];
    $this->date_birth = $arr_temp[$i]['date_birth'];
    $this->franchise = $arr_temp[$i]['franchise']; 
}
цикл с 1 по 10 ....не?
Простите я неправильно описал проблему

Я хочу чтобы в цикле перебирались поля объекта "класса" и в них присваивалось соответствующее значение с ассоциативного массива.

Пример:
PHP код:
foreach ($this as $key => $value) {
  
$value $arr_temp[0][$key];


Понимаю что привел в пример полный бред - но что-то подобное мне нужно.
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 16.04.2013, 21:19   #4
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Если хотите сделать тяп-ляп, лишь бы работало, то можете воспользоваться функцией get_object_vars или просто
PHP код:
foreach ($arr_temp[0] as $k => $v) {
    if (
property_exists($this$k))
        
$this->$k $v;

Проблема данного кода в том, что он будет присваивать значения как публичным, так и приватным свойствам объекта, а это нехорошо.

Если хотите сделать правильно, то это не так просто. Нужно использовать отражения классов(ReflectionObject), проверять тип свойства (публичное ли) и только тогда присваивать.

Всё это можно вынести в отдельный метод класса и передавать ему лишь массив с данными. Вроде
PHP код:
$object->setProperties($arr_temp[0]); 
а он там внутри уже будет делать проверки и т.д.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 18.04.2013, 09:57   #5
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Радость

Цитата:
Сообщение от Johnatan Посмотреть сообщение
Если хотите сделать тяп-ляп, лишь бы работало, то можете воспользоваться функцией get_object_vars или просто
PHP код:
foreach ($arr_temp[0] as $k => $v) {
    if (
property_exists($this$k))
        
$this->$k $v;

Проблема данного кода в том, что он будет присваивать значения как публичным, так и приватным свойствам объекта, а это нехорошо.

Если хотите сделать правильно, то это не так просто. Нужно использовать отражения классов(ReflectionObject), проверять тип свойства (публичное ли) и только тогда присваивать.

Всё это можно вынести в отдельный метод класса и передавать ему лишь массив с данными. Вроде
PHP код:
$object->setProperties($arr_temp[0]); 
а он там внутри уже будет делать проверки и т.д.
Спасибо огромное, это то что нужно "+"
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перебор имен всех доступных свойств и методов объект в VBA ivan1h42 Microsoft Office Excel 4 10.11.2021 20:11
Перебор объектов в цикле FearDog Общие вопросы Delphi 2 01.04.2013 22:05
Программный перебор свойств контрола alex77755 Microsoft Office Excel 8 21.06.2012 07:20
Присвоение и передача значения переменной из HTML в PHP alexscorp1661 Помощь студентам 1 18.04.2010 10:33
Присвоение текста в цикле AvaMight Общие вопросы Delphi 2 16.06.2009 00:23

Реклама для незарегистрированных, регистрация на форуме