@phpclubru

Страница 223 из 956
Pavel
31.05.2017
12:14:17
Ну да было бы более органично

Вообще в ключи должна быть возможность засовывать всякие разные вещи

Dmitry
31.05.2017
12:14:52
например, PHP код ;)

Google
Dmitry
31.05.2017
12:15:04
и при извлечении - исполнять его ;)

Adel
31.05.2017
12:15:05
В нормальных языках есть hashCode для каждого обьекта

можно реализовать и спокойно юзать в качестве ключа обьекты

нормальными я называю яву и сишарп. сорри если ктото обиделся :)

Pavel
31.05.2017
12:16:28
А че обижаться, недостатки языка надо признавать такими какие они есть

Dmitry
31.05.2017
12:16:51
написать трейт для __toString и использовать как hashCode

Pavel
31.05.2017
12:16:52
ну в пхп тоже есть функция spl_object_hash()

Dmitry
31.05.2017
12:17:14
или так, да

Adel
31.05.2017
12:17:41
каждый класс должен сам знать как делать из себя хеш

определять значимые и незначимые поля

Dmitry
31.05.2017
12:18:22
__toString

Pavel
31.05.2017
12:18:38
Ну ты путаешь хеш как адрес объекта и хеш как уникальное значение из свойств

у двух разных объектов могут быть все поля одинаковые

Google
Pavel
31.05.2017
12:19:16
тогда они не должны иметь одинаковый хеш все равно

Dmitry
31.05.2017
12:20:10
ну hashCode и есть про поля

а spl_object_hash - про уникальный номер объекта

Pavel
31.05.2017
12:22:00
ну вот и ответ почему нельзя объекты засовывать в качестве ключей. Это ссылочный тип и трудно у него определить уникальное значение

Alexandr
31.05.2017
12:22:13
в принципе можно реализовать метод хэширования вручную, а вместо массивов использовать объекты реализующие ArrayAccess итд

Pavel
31.05.2017
12:22:16
А если он содержит вложенный объект то его и считать еще долго.

Adel
31.05.2017
12:22:42
для valueObject - уникальность определяется значениями полей. для энтити - значением Id

Pavel
31.05.2017
12:23:32
Ну entity и VO это лишь два маленьких случая в огромном мире объектов

Dmitry
31.05.2017
12:24:23
Паш, adel про то, что условия равенства объектов - это не задача языка, а задача логики, и должна прописываться программистом

Adel
31.05.2017
12:24:30
именна

Dmitry
31.05.2017
12:24:34
spl_object_hash тут не катит

но в php это решается __toString и от hashСode отличается лишь менее удобным способом использования

Pavel
31.05.2017
12:25:51
Есть в других языках нормальное определение, что два объекта равны, если они одного и того же типа и в памяти начинаются на один адрес.

__toString мне тоже не видится хорошей идеей хешировать объект. Этот метод часто используется для человекопредставимого значения объекта. Например для объекта пользователя это может быть его ФИО

Dmitry
31.05.2017
12:26:29
на уровня ЯП - да, на уровне бизнес-логики - нет

Pavel
31.05.2017
12:26:52
Ну значит нужна перегрузка операторов!

Dmitry
31.05.2017
12:28:04
ну скорее нужен магический метод, применяемый при сравнениии == объектов, но такого нет и не будет ибо БС, так что остается только __toString

Pavel
31.05.2017
12:29:01
БС это что?

Google
Dmitry
31.05.2017
12:31:32
т.е. совсем не обязательно __toString рассматривать как хеш, массив его сам захеширует... просто как уникальую строку

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

Pavel
31.05.2017
12:36:11
Ок, ну вот эквивалентность это сложно

У объекта может быть 100500 полей с объектами, это все может пару мегабайт весить. Сравнивать очень долго.

Adel
31.05.2017
12:37:11
Плохой обьект :)

Pavel
31.05.2017
12:37:34
Да он сам не в восторге

Dmitry
31.05.2017
12:37:38
Это тебе решать. Может у тебя 100499 из них - это объекты, не влияющие на эквивалентность

Adel
31.05.2017
12:37:43
Использовать такие обьекты в качестве ключа массива - это мягко говоря сомнительное решение :)

Dmitry
31.05.2017
12:37:56
типа объектов - сервисов

Pavel
31.05.2017
12:38:53
У меня вот на работе ровно такой кейс- есть документ, который является огроменным объектом.

Dmitry
31.05.2017
12:39:17
а может достаточно сравнить $id ;)

Pavel
31.05.2017
12:39:20
При генерации PDF из него получается 10-15 страниц данных.

Pavel
31.05.2017
12:39:26
Но опять же, в процессе работы скрипта части объекта могут меняться, так что это будет уже не тот объект что на диске хранится.

Dmitry
31.05.2017
12:40:18
что вот, о том и речь, что во многих случаях (string)$obj1 === (string)$obj2 лучше, чем тупое $obj1 == $obj2

Pavel
31.05.2017
12:40:25
Ладно что-то я окончательно перестал понимать что и кому я хочу доказать. Пойду чаю сделаю.

Adel
31.05.2017
12:42:30
Ладно что-то я окончательно перестал понимать что и кому я хочу доказать. Пойду чаю сделаю.
Я о том, что у твоего обьекта может быть номер документа или чтото другое что однозначно его идентифицирует. И в рамкх приложения.. даже если два обьекта разные, но имеют один ID - то по логике - это один и тот же обьект.

Dmitry
31.05.2017
12:45:46
в разных частях приложения логика может быть разная... например, в сервисе - да, а в UoW - нет, там важны изменения, что бы найти разницу ;)

Adel
31.05.2017
12:47:42
ну вощем, логику должны определять классы. в сервисах своя, в UoW - своя. использовать __toString для этого я бы не стал...

Dmitry
31.05.2017
12:50:09
ну можно делать метод equal, типа $obj->equal($obj2), но принципиальной разницы не вижу

Google
Adel
31.05.2017
12:52:47
да. В сишарпе есть Equals и HashCode чтоли...

там каждая структура данных выбирает что ей удобнее :)

Pavel
31.05.2017
13:36:52
Вот метод equal это минимально вредный костыль. У нас интерфейс Comparable и метод isEqual() в нем.

Надеюсь это рано или поздно вынесут на уровень языка.

Dmitry
31.05.2017
13:38:31
интерфейс мешает сделать ->equal(Object $object)

Pavel
31.05.2017
13:39:14
Всмысле? Ты же можешь задать любой тайпхинт и реализацию

Dmitry
31.05.2017
13:40:14
мешает менять тайпхинтинг ;)

Pavel
31.05.2017
13:40:20
А, ты про общий случай видимо. Ну это обычно мы делаем в коде if (!$object instanceof get_class($this)) { throw InvalidArgumentExcpetion() }

Admin
ERROR: S client not available

Dmitry
31.05.2017
13:41:02
ну да, я про то, что тайпхинтинг все же получше

Adel
31.05.2017
13:41:34
В сишарпах Equals(Object object) - т.е. ты должен сам внутрях проверить на соответсвие типа :)

и в принципе понятно почему иначе не работает

Pavel
31.05.2017
13:42:05
А там какая-нибудь перегрузка есть? Когда можно одному методу задать несколько сигнатур и реализаций?

Adel
31.05.2017
13:43:02
да.

но зачем?

Pavel
31.05.2017
13:43:19
Это читабельно и понятно

Adel
31.05.2017
13:43:26
Ах да. видел. наверно как раз в явах.

или нет

там делают Equals(Object) и Equals(MyClass)

да. ты прав. так изящнее

Google
Pavel
31.05.2017
13:44:22
Костыль к этому - когда в пхп предлагали ввести множественные тайпхинты function some(Object|ParentObject $obj)

Adel
31.05.2017
13:44:38
слава богу не приняли :)

Pavel
31.05.2017
13:44:46
и потом в коде проверка switch (get_class($obj))

Roman
31.05.2017
13:46:19
composer install отрабатывает на 4 одинаковых хостах за несколько секунд, а на одном тупит несколько минут с нулевой загрузкой по памяти и cpu, может кто подсказать?

Pavel
31.05.2017
13:46:57
Это скорее всего с сетью что-то

Pavel
31.05.2017
13:47:17
может DNS, или какие-то авторизационные токены не прописаны, или где-то режется файерволом

Roman
31.05.2017
13:47:39
Ну сеть там есть, сам композер выкачивается скриптом и нормально

Pavel
31.05.2017
13:52:05
Он может пытаться выкачивать из разных реп. Смотря что в composer.json напрописано

Artem
31.05.2017
13:52:11
нестандартные зависимости может какие тянутся?

с хостов левых

Roman
31.05.2017
13:52:53
Нет, только packagist

Aziz
31.05.2017
13:53:56
Ребята подскажите где лучше брать выделенный сервер для крупного проекта?

Roman
31.05.2017
13:53:58
Нашел, > The zip extension and unzip command are both missing, skipping.

Artem
31.05.2017
13:54:25
:)

Aziz
31.05.2017
13:56:42
мин. требования E5-2600 v3 , 256 ram, SAS SATA 400 bg

Oleg
31.05.2017
14:24:00
256 рам?

400 бг?

Adel
31.05.2017
14:26:04
256Mb and 400Gb obviously

Oleg
31.05.2017
14:27:40
Курпный проект на 256 метрах оперативы?

Страница 223 из 956