Суммирование массивов есть. А вот суммирование объектов = нет.

Screjet

Новичок
Суммирование массивов есть. А вот суммирование объектов = нет.

Собственно сабж.

Конструкция типа
PHP:
$a = array();
$b = array();
$c = $a + $b;
работает, а вот
PHP:
$a = new stdClass();
$b = new stdClass();
$c = $a + $b;
с объектами сие не проканывает.

Может есть смысл добавить такую возможность?
..или такого рода извращения лучше забыть? :)
 

Demiurg

Guest
и как это должно работать ?

>..или такого рода извращения лучше забыть?
лучше забыть
 

Screjet

Новичок
> и как это должно работать ?
точно так же как и с массивами: Свойства первого операнда остаются неизменные, свойства второго, которые не существуют в первом, добавляются.

Альтернативно можно использовать foreach или типа такого:
PHP:
$conc = (object) ( (array)$obj_A + (array)$obj_B );
aggregate( $conc, 'class_A');
aggregate( $conc, 'class_B');
Но такая конструкция = жуткое извращение :)
 

Фанат

oncle terrible
Команда форума
а чем тебя не устраивает написать при создании В слово Extends А?
 

Screjet

Новичок
Фанат,
Хорошее слово, но оно используется для более важных целей, и повторять это слово дважды/более нельзя. Да и подход с агрегацией "на лету" более приемлемый.

tony2001,
Получим сумму свойств как массив, а нужен в результате объект. И не просто объект, а объект класса.

Может, сути не уловил: можно подробней?
 

tony2001

TeaM PHPClub
Screjet
массив - он и есть массив.
а как можно складывать объект "Корова" с объектом "Точка" - я не понимаю.
вообще, требование "получить объект, который будет сочетать в себе атрибуты двух других" решается явно другими способами (если вообще возникает).
 

Screjet

Новичок
>а как можно складывать объект "Корова" с объектом "Точка" - я не понимаю.
Пример: есть объект таблицы, у таблицы есть родные свойства (приватные) и название=>значение полей (публичные).

Пример2: есть объект пользователь, в определенный момент пользователь превращается в админа (получает свойства админа).
 

Demiurg

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

Screjet

Новичок
Originally posted by Demiurg
Screjet
советую почитать, что нибудь по ооп, у тебфя каша в голове.
В твоем втором примере класс админ должен наследоваться от класса пользователь, это написано в любой книжке.
Согласен. Это стандартный подход. А по сути зачем пользователю таскать в себе свойства админа? На случай если он станет админом? А если у админа есть сложные свойства привилегий и/или уровни доступа, зоны, etc? Это все таскать в пользователе?
Какое, обычно, соотношение ползователей к админам?
 

Фанат

oncle terrible
Команда форума
Лично я бы сделал вообще класс юзер с различными свойствами для админа.
Никаких особых методов ему не требуется - все то же, то у юзера, тольк прав больше. а реализация этих прав в этот класс уже не входит
 

Demiurg

Guest
Screjet
я разве говорил, что пользователю надо тоскать за собой свойства админа. Я говорил про наследование.
 

Screjet

Новичок
2tony2000,
точнее будет как Demiurg сказал. Админ по сути тот же пользователь.
Юзер extends Человек
Админ extends Юзер

Дык, так в итоге получится:
Бог extends Человек
 

AnToXa

prodigy-одаренный ребенок
$adm = new Admin($user);

и вообще это просто ужасно - складывать поля объектов, чтобы получить еще один объект причем другого, несвязанного с данными класса.

а ты уверен, что объект проинициализирован корректно, а ты уверен, что он проинициализирован полностью?

почему тогда не использовать массивы + функции? разница получается только в syntax sugar и лишних проблемах using oop.
 
Сверху