Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2013, 02: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, 08:10   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

Код:
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, 18: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, 22: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, 10: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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



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