LINUX.ORG.RU

[php] array, объект в качестве ключа

 


0

1

Вроде как по ману в качестве ключа можно использовать только int и string.
Есть необходимость использовать в качестве ключа произвольные объекты, а в качестве значения - массив строк. Что-то типа:

$obj1 = new class1;
$obj2 = new class2;
$obj3 = new class2;
$arr = array($obj1=>array($prop11,$prop12,...),
             $obj2=>array($prop21,$prop22,...),
             $obj3=>array($prop31,$prop32,...), ...);
// для одного класса создано несколько объектов (obj2, obj3),
//  - их заносить надо тоже по отдельности
И, соответственно, обращаться к ним имея на руках объект:
$prop = array($obj1);
Вопрос - как это лучше реализовать?


не перевелись еще говнокодеры :)

Почему не засунуть эти строки в поля объектов?

nu11 ★★★★★
()
Ответ на: комментарий от nu11

>>Почему не засунуть эти строки в поля объектов?
Потому что это не свойства объектов?

не перевелись еще говнокодеры :)

а куда мы денемся!

spdooh
() автор топика
Ответ на: комментарий от nu11

Вот есть у тебя n человек. И m номерков. Ты их раздал людям как попало - кому и по пять, кому ни одного.
Вот для учета этих номерков я бы лично создал новый список людей, у которых есть номерки, а не спрашивал у каждого встречного - «а нет ли у тебя случаем номерка?»

spdooh
() автор топика
Ответ на: комментарий от spdooh

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

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

а если знать свой номер людям и не нужно то к чему вообще эта полемика

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

Им не особо нужно...
Это надо мне - вот знаю, что у пятого человека номер - посылаю его копать. То есть можно и в людях реализовать хранение свойств, но тогда надо это же самое делать в стулья, деревьях и вообще всех объектах...
Я решил, что чем всем добавлять свойство, которое может и не будет использоваться, решил, что лучше добавить отдельное хранилище...

spdooh
() автор топика
Ответ на: комментарий от spdooh

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

spdooh
() автор топика
Ответ на: комментарий от spdooh

>Вот есть у тебя n человек. И m номерков. Ты их раздал людям как попало - кому и по пять, кому ни одного.

соответствие «номер» -> «объект» выглядит куда логичнее и проще в реализации, не находишь? Вообще это все абстракция, правильная реализация зависит от целей конкретной задачи

anonymous
()

>Вопрос - как это лучше реализовать?

Лучше от каждого объекта брать некий id в качестве ключа, благо id наверняка есть.

Работать, наверное, тоже побыстрее будет.

anonymous
()

$obj1=>array($prop11,$prop12,...)

Жесть какая.

Вопрос - как это лучше реализовать?

$obj1->set_props(array($prop11,$prop12,...))
$props = $obj1->props();

А как ещё иначе?

KRoN73 ★★★★★
()
Ответ на: комментарий от spdooh

>Потому что это не свойства объектов?

Но они связаны с этим объектом. Неужели настолько строгая логика, что никак нельзя смешать? Ну, тогда у меня, например, у каждого объекта есть метод ->internal_uri_ascii(), который возвращает чистый уникальный ASCII-идентификатор (имя класс и ID).

Но для таких целей, как у тебя, по-моему, я его нигде не додумался использовать. Он применяется только для межсессионной передачи объектов.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Но так я же не сказал для чего я их использую)
а так - да, свойства объекта лучше хранить в объекте.

В принципе, можно и в объекте реализовать, но лично для меня реализация отдельно от всего выглядит более логичной.
Спасибо за заботу, что не даете появиться быдлокоду)

spdooh
() автор топика
Ответ на: комментарий от spdooh

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

внимание

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

зы

хотя я и не говорю что геттеры-сеттеры это хорошо, но бывают же случаи

trashymichael ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.