Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Копировать свойста объекта в объекте [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 [2] 3 »   

> Без описания
armancho7777777 Супермодератор
Отправлено: 05 Октября, 2012 - 00:50:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Anguis пишет:
Создал объект, задал ему свойства, вызвал метод, который сам составляет необходимый запрос и записывает данные в базу. Все. У него есть возможность загрузить свойства из другого объекта или массива.

Я не могу понять, что и для чего Вы это пытаетесь реализовать )
Но public свойства - плохая практика.

Anguis пишет:
Это отчего-же?

Постоянные запросы к БД для получения объекта.

(Отредактировано автором: 05 Октября, 2012 - 01:11:03)

 
 Top
caballero
Отправлено: 05 Октября, 2012 - 00:55:36
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




а какие проблемы сериализовать объект и сунуть в БД как строку. И пофиг какие там у него свойства


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Anguis
Отправлено: 05 Октября, 2012 - 00:56:00
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


Помог: 2 раз(а)




Цитата:

А не могу понять, что и для чего Вы это пытаетесь реализовать )
Но public свойства - плохая практика.

Это корпоративное приложение. Раскрывать его назначение не имею право. Разрабатывалось не мной. Я продолжаю над ним работать, оптимизирую, добавляю новые функции.
Цитата:
Постоянные запросы к БД для получения объекта.

Ни каких постоянных запросов. Максимум три запроса на получение на один вызов скрипта. Ну а для записи сколько нужно записать - столько и запросов)
(Добавление)
caballero, сериализованный объект можно записать только в одно текстовое поле. Мне-же необходимо модифициорвать в базе множество полей. Есть среди них и поля для сериализованных объектов. Т.е. возможна запись такой структуры:

CODE (htmlphp):
скопировать код в буфер обмена
  1. object {
  2.  
  3.  'property1' => 'value1',
  4.  'property2' => 'value2',
  5.  
  6.  'property3' => object{
  7.   'property1' => 'value1',
  8.   'property2' => 'value2',
  9.   'property3' => 'value4',
  10.  }
  11.  
  12.  'property4' => object{
  13.   'property1' => 'value1',
  14.   'property2' => 'value2',
  15.   'property3' => 'value4',
  16.  }
  17.  
  18. }

(Добавление)
тут 'property3' и 'property4' будут сериализованны и записаны
 
 Top
caballero
Отправлено: 05 Октября, 2012 - 01:07:14
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




вы городите какую то чушь только не пойму какую
или не можете внятно сформулировать что вам нужно

Цитата:
Мне-же необходимо модифициорвать в базе множество полей. Есть среди них и поля для сериализованных объектов.

как поля в БД связаны с полями объектов?
Поля наперед известны? А зачем клонирование которое на самом деле не клонирование а непонятно что?

(Отредактировано автором: 05 Октября, 2012 - 01:07:40)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Anguis
Отправлено: 05 Октября, 2012 - 01:14:21
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


Помог: 2 раз(а)




Ну что вы в дебри лезете то, а? При чем здесь известно не известно. Я вопрос поставил конкретно. Ответ простейший - либо возможно, либо нет. Зачем копать архитектуру начинаете? Такое ощущение что я не на форуме программистов, а на форуме программистов-шпионов, у которых цель выведать побольше о программе другого.)))

Связаны. Есть зарезервированные имена, которые если встречаются в объекте, то значит записываются в нужные поля таблицы, все остальное сериализуется и записывается в базу в отдельное поле.
 
 Top
caballero
Отправлено: 05 Октября, 2012 - 01:20:55
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Такое ощущение что я не на форуме программистов, а на форуме программистов-шпионов, у которых цель выведать побольше о программе другого.)))

кому нафиг нужна твоя программа чтобы кто то выведывал. тут у каждого свои программы и не по одному десятку програм.

Цитата:
Я вопрос поставил конкретно.

из того как ты поставил ни фига не понятно что ты хочешь. Не можешь связать три слова а возомнил что можешь написать гениальную не имеющую аналогов программу за которой охотятся все спецслужбы.

Еще раз - то что ты написал - чушь. Иначе ты уже бы получил ответ.
есть два варианта - либо объект сериализуется либо записывается в структуру БД по полям а значит его поля и поля БД должны соответсвовать.
Что ты тужишся изобразить - понять пока никаким каком невозможно.
(Добавление)
Цитата:
Связаны. Есть зарезервированные имена, которые если встречаются в объекте, то значит записываются в нужные поля таблицы, все остальное сериализуется и записывается в базу в отдельное поле.

а типа клонирование к чему?
(Добавление)
а что мешает писать в сериализованиео поле весь объект
извесные поля пишешь как обычно
объект в сериализованое поле

вынул с этого поля затем восстановил данные с изсестных полей

(Отредактировано автором: 05 Октября, 2012 - 01:23:57)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Anguis
Отправлено: 05 Октября, 2012 - 09:05:28
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


Помог: 2 раз(а)




Да не стоит у меня проблемы записи в базу!!!
Нужно оптимизировать вот этот код, и только!
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. class duble{
  3. function construct($obj=false){
  4.    if(gettype($obj)=='array'||gettype($obj)=='object'){
  5.      foreach($obj as $var => $val){
  6.         $this->$var = $val;
  7.       }
  8.     }
  9.   }
  10. }
  11.  

Хотелось обойтись без цикла. Что тут может быть не понятного?
Впрочем я уже выяснил что иначе не сделать... Спасибо за помощь. От такой помощи на форум больше писать не хочется.
 
 Top
Anguis
Отправлено: 05 Октября, 2012 - 12:07:16
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


Помог: 2 раз(а)




КОНКРЕТНЫЙ ВОПРОС К УЧАСТНИКАМ ФОРУМА КОТОРЫЕ УМЕЮТ ВНИМАТЕЛЬНО ЧИТАТЬ!!!
Данная конструкция создает объект класса stdClass: $obj = (object) $array;
Существует ли подобная конструкция, только создающая объект произвольного класса? Или как реализовать такую конструкцию?

Пример своей реализации я приводил в первом сообщении.
Еще пример (такой-же как и мой, тока функцией): http://blog[dot]in16[dot]ru/index.php/20[dot][dot][dot]array-to-object/

caballero, почему эту задачу вы считаете чушью? Неужели она такая редко встречаемая и кривая, что о ней даже в блогах пишут? Почему вы начинаете что-то домысливать? Не знаете ответа - так и скажите, не надо в архитектуру разрабатываемого мной приложения лезть! Я там и без вас, поверьте, отлично справлюсь. Я просто хочу программировать не быдло код, а изящные и красивые вещи, которые быстро работают и максимально функциональны. Вот и ищу различные красивые решения тех или иных задач. У меня не стоит проблем с работоспособностью приложения. У меня стоят задачи оптимизировать и лаконизировать код для большей производительности.
И ни чего сверх гениально или тупого в этом нет. Эти задачи стоят перед любым разработчиком, который вынужден работать с чужими творениями, да и со своими тоже(и даже в первую очередь со своими).
И не надо мне тыкать. Мы на брудершафт не пили! И у меня тоже семья и дети и не один десяток приложений.
Лишь бы обосрать человека и мордой в его некомпетентность тыкнуть... Противно...
 
 Top
caballero
Отправлено: 05 Октября, 2012 - 13:06:02
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Существует ли подобная конструкция, только создающая объект произвольного класса?

компилятор возразит - нет такого понятия "произвольный класс". Класс всегда конкретный.

Цитата:
caballero, почему эту задачу вы считаете чушью?

потому что это либо чушь либо вы не в состоянии сформулировать нормально вопрос изза своей паранойи что кто то догадается какую программу вы делаете

Цитата:
Почему вы начинаете что-то домысливать?

а что остается делать если вы не только не можете внятно сформулировать вопрос а даже не понимаете что он невнятно сформулирован.


Цитата:
Не знаете ответа - так и скажите

Мой опыт позволяет дать ответ на большинство ТЕХНИЧЕСКИ ГРАМОТНО сформулировных вопросов. Или как минимум показать в каком направлении ответ искать.

Цитата:
И ни чего сверх гениально или тупого в этом нет.

гениального -да.

Цитата:
Эти задачи стоят перед любым разработчиком,

нет, в основном перед говнокодерами-новичками. Первый признак новичка - паранойя по поводу его не имеющей аналогов программы.

Цитата:

Хотелось обойтись без цикла. Что тут может быть не понятного?

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

Цитата:

Впрочем я уже выяснил что иначе не сделать... Спасибо за помощь. От такой помощи на форум больше писать не хочется.

Вы обратили внимание что кроме меня на форуме есть еще много людей которые учтут вашу ранимость и не будут вам тыкать. И среди них есть весьма опытные программеры. и никто вам не помог. Может проблемма в вас а не в форуме. А то напоминает притчу о солдате который идет в ногу а вся рота не в ногу.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
EuGen Администратор
Отправлено: 05 Октября, 2012 - 13:14:21
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Не понимаю, где Вы вычитали про низкое быстродействие циклов (подозреваю, речь шла о разыменовании длинных ссылок и многомерных массивов в foreach), но если велика охота, можно сделать так:
PHP:
скопировать код в буфер обмена
  1. class Foo
  2. {
  3.    public $rgData = null;
  4.    public $iX     = null;
  5.    public $iY     = null;
  6.    public $fnData = null;
  7.  
  8.    public function __construct($rgData, $iX, $iY, $fnData)
  9.    {
  10.       $this->rgData = $rgData;
  11.       $this->iX     = $iX;
  12.       $this->iY     = $iY;
  13.       $this->fnData = $fnData;
  14.    }
  15. }
  16.  
  17. class Duplicator
  18. {
  19.    public function __construct($mPrototype)
  20.    {
  21.       if(is_object($mPrototype))
  22.       {
  23.          $fnCollector=function($mValue, $mKey){$this->$mKey=$mValue;};
  24.          $fnCollector->bindTo($this);
  25.          array_walk(get_object_vars($mPrototype), $fnCollector);
  26.       }
  27.    }
  28. }
  29.  
  30. $rgData = array('baz'=>'test', 1, 'field'=>false, null);
  31. $fnData = function($x)
  32. {
  33.    return $x;
  34. };
  35. $rFoo = new Foo($rgData, 64, 16, $fnData);
  36. $rDup = new Duplicator($rFoo);
  37. //var_dump($rFoo, $rDup);


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Anguis
Отправлено: 05 Октября, 2012 - 15:28:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


Помог: 2 раз(а)




EuGen, Браво! Пока первое, отличное от моего решение! Только вероятно лучше использовать array_walk_recursive. Дело как раз таки и заключается в многомерных массивах. Я не думаю что array_walk_recursive будет быстрее foreach. В инете сравнительные тесты этих методов дают противоречивые результаты.
 
 Top
EuGen Администратор
Отправлено: 05 Октября, 2012 - 15:31:37
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Anguis пишет:
Только вероятно лучше использовать array_walk_recursive

Для чего? Список свойств всегда будет одномерным массивом. И если в каком-либо свойстве будет объект, то он скопируется как есть. Поэтому нужды в этом нет. На выходе будет объект, у которого свойства будут такими же, как и у исходного.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Anguis
Отправлено: 05 Октября, 2012 - 16:52:06
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


Помог: 2 раз(а)




Придумал еще способ.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $array = array('1'=>'3','red'=>'four','three'=>array('prop'=>'op','prop2'=>'op2'));
  3. $obj = unserialize(str_replace('a:','O:9:"className":',serialize($array)));
  4.  

теперь нужно сделать тесты, что будет быстрее.
 
 Top
caballero
Отправлено: 05 Октября, 2012 - 16:57:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
И если в каком-либо свойстве будет объект, то он скопируется как есть.

скопируется ссылка


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
EuGen Администратор
Отправлено: 05 Октября, 2012 - 17:09:05
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Это и имеется ввиду "как есть". Я не стал писать про clone - потому как у автора есть какая-то неприязнь к этому методу.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB