@prophp7

Страница 831 из 1387
Борис
13.12.2017
13:49:52
пример.

в студию

Андрэ
13.12.2017
13:50:01
Из формы данные должны приводиться к типам до того, как мы их сравнивать и тп начинаем, как мне кажется

Dmitry
13.12.2017
13:50:25
давай ты начни с примера, как вы говно жрали ;)

Google
Андрэ
13.12.2017
13:51:12
ты потроллить чисти? тогда мимо

Dmitry
13.12.2017
13:51:19
приводить их нужно, конечно, но это вопрос как раз к мозгам

Андрэ
13.12.2017
13:51:21
иначе не понятно, к чему ты это

Борис
13.12.2017
13:51:26
давай ты начни с примера, как вы говно жрали ;)
Ну перечитай мое сообщение, может увидишь пример.

Dmitry
13.12.2017
13:51:53
не, там примера нет, там такие же "а если да кабы"

вот на днях словил проблему, кстати.... оказывается доктрина bigint из базы конвертит в строку, хотя я ожидал int

Борис
13.12.2017
13:52:29
эээээээээээээ ..... ну ок. пиши == мне пох

Dmitry
13.12.2017
13:52:30
и проверочка была ===

Anton
13.12.2017
13:52:40
юзаем тупо === и потом удивляемся, что это у нас 55 из формы === 55 дает false... как бы мораль, что везде мозги нужны
если у вас так, то это плохо. все инпуты от юзера должны нормализироваться и валидироваться должным образом.

Андрэ
13.12.2017
13:52:51
Я тебя вообще не понял, бро. Ты выдумал пример, что кто-то тупит, когда их формы ждет число, а там строка. И мораль вывел какую-то. только не понятно, ты что опроверг то?

Dmitry
13.12.2017
13:53:44
о каком приведении можно говорить, если половина пишет не читая ;)

Google
Андрэ
13.12.2017
13:54:04
О каком приведении можно говорить, если в африке дети голодают

Борис
13.12.2017
13:54:12
И продолжаешь спорить.... ну ок

Dmitry
13.12.2017
13:55:35
Кек... словил, судя по всему еще локально, в деве?
угу, но только потому, кстати, что strict =1 был, и везде тайпхинт, там сработало несответствие типов... и то далеко не сразу словил

а без хинтов могла бы быть оказия

$iD
13.12.2017
13:56:03
и все эти кейсы описаны в доке

Dmitry
13.12.2017
13:56:35
decimal тоже будет стринг. если чо
почему decimal _должен быть_ string я просто понимаю

$iD
13.12.2017
13:56:57
там написяно почему бигинт должен быть стрингом тож

Dmitry
13.12.2017
13:59:31
да да... потому что BC, полагаю, и проверить PHP_INT_MAX ну никак низя... только, поверь, может ты прежде чем работать с библиотекой зубришь всю документацию и сдаешь строгий экзамен... я нет ;) и это "написано", находится уже после того, как ловится.

Андрэ
13.12.2017
14:00:50
Нет ничего страшного не знать об этом. "Страшно" - даже когда узнал, делать вид, что это косяк)

Dmitry
13.12.2017
14:01:17
это на самом деле проблема отуствия опыта.
проблема отсуствия опыта работы с bigint в доктрине, да, конечно... а ты родился сразу с опытом во всем? ;)

Anton
13.12.2017
14:02:02
проблема отсуствия опыта работы с bigint в доктрине, да, конечно... а ты родился сразу с опытом во всем? ;)
мой посыл именно об этом, что если ты не читаешь, а потом узнаешь после ряда ошибок. т.е. ты получаешь опыт.

Dmitry
13.12.2017
14:02:46
Нет ничего страшного не знать об этом. "Страшно" - даже когда узнал, делать вид, что это косяк)
ну, это не косяк, а неожиданное поведение... пхп вообще справляется с большими числами посредством перевода их во float, почему бы не эмулировать то же поведение?

Dmitry
13.12.2017
14:04:29
Anton
13.12.2017
14:06:21
удивись ;) php -r 'var_dump(9223372036854775810);'
о боже. что ты этим хочешь показать? То что есть экспонентное представление числа? Большие числа — это специальная структура данных. И есть целый класс алгоритмов, которые работают с большими числами. Такие алгоримты еще называют длинной математикой.

Dmitry
13.12.2017
14:06:43
ты тип данных заметил, да?

Anton
13.12.2017
14:08:22
я наверное не буду больше комментировать. этот спор не имеет никакого смысла для меня.

Google
Dmitry
13.12.2017
14:09:05
вообще ты задал вопрос, я тебе ответил... чего истеришь то?

Антон
13.12.2017
14:12:04
https://github.com/symbios-zi/taxi/blob/master/spec/App/Entity/JourneySpec.php

как тут тестируется класс Journey если он даже не инициализирован?

phpspec через рефлексию его создает?

Max
13.12.2017
14:14:54
а что это за репозиторий?

Антон
13.12.2017
14:15:11
да делаю тестовый проект

Dmitry
13.12.2017
14:15:20
ох, когда уже гитхаб приделает статанализ пхп кода ;)

Anton
13.12.2017
14:15:40
phpspec через рефлексию его создает?
почитай про phpspec. просто для примера тебе покажу, что там есть метод let который по сути инициализирует. и там есть такая строчка как beConstructedWith

Антон
13.12.2017
14:16:00
это я понял

Max
13.12.2017
14:16:13
Антон
13.12.2017
14:16:20
предложил @fes0r в чатике симфони, обсуждали как то.

Max
13.12.2017
14:17:31
а на контексты думаешь делить?

Антон
13.12.2017
14:18:13
а на контексты думаешь делить?
ну пока что Сергей сказал делать, так. Потом он будет накидовать требования и видимо когда пойму как тяжело делать так, то переделаю

а на контексты думаешь делить?
контексты в контексте DDD?

Max
13.12.2017
14:19:01
было бы норм в виде геркин фич описать

Антон
13.12.2017
14:19:13
тут столько умных людей, было бы больше менторов было бы круто

Max
13.12.2017
14:19:14
потом увидешь как у тебя получаются микросервисы в твоем монолите

Антон
13.12.2017
14:19:51
почитаю что это

Google
Антон
13.12.2017
14:20:15
видимо позиция такая что делать все по надобности, и не заниматься преждевременным реффакторингом

так вопрос не об этом. beConstructedWith как порождает объект исследуемый? так понимаю наследуется от него?

Sergo
13.12.2017
14:22:14
legacy есть legacy на строгие типы его уже не перепишешь
минуту, а если указать strict types, но не указывать тип в переменной (т.е. просто оставить function($a) {} ), то будеш ошибка?

Антон
13.12.2017
14:22:45
/** * The object behaviour is the default base class for specification. * * Most specs will extend this class directly. * * Its responsibility is to proxy method calls to PhpSpec caller which will * wrap the results into PhpSpec subjects. This results will then be able to * be matched against expectations.

Most specs will extend this class directly. видимо ключевое предложение

Vladislav
13.12.2017
14:23:04
strict types вроде >= 7.0

Alexander
13.12.2017
14:33:43
удивись ;) php -r 'var_dump(9223372036854775810);'
а как по твоему он должен был справится с таким числом?)

Dmitry
13.12.2017
14:34:02
кто? пхп?

Alexander
13.12.2017
14:34:09
да

Admin
ERROR: S client not available

Dmitry
13.12.2017
14:34:21
мм... тебе все выше этого сообщения пересказать? ;)

Alexander
13.12.2017
14:35:28
"ну, это не косяк, а неожиданное поведение... пхп вообще справляется с большими числами посредством перевода их во float" почему это неожиданное поведение? и какое для тебя было бы ожиданное?

Dmitry
13.12.2017
14:36:02
ну ты понял про что "неожиданное поведение" было про доктрину?

Dmitry
13.12.2017
14:37:15
ну вот... "ожиданное" было бы такое, как и пхп.. т.е. не в строку давать, а, в зависимости от значения, int или float

хм, может оно чем-то хуже и я не вижу подводных камней...

Stephen
13.12.2017
16:01:42
Ребзя, а есть какое-то понятное описание принципа подстановки Лисков? Желательно хотя бы один пример не про прямоугольник и квадрат )

Stephen
13.12.2017
16:13:40
а в чем у тебя затруднение? один из легких для понимания принципов ;)
Нуу... Я его просто не могу понять ) Все остальные освоил легко, а здесь какой-то тупняк. Ни на классическом примере с квадратами-прямоугольниками, ни на примере с бойлерами отсюда https://dou.ua/lenta/articles/liskov-substitution-principle/

Google
Stephen
13.12.2017
16:14:39
Все остальные - это я про SOLID

Dmitry
13.12.2017
16:17:15
ну у тебя есть function bar (A $a) {}... и есть class B extends A {}. Ты всегда должен мочь сделать bar(new B())... что из этого следует? Если ты в B переопределяешь какие-то методы, то ты не должен вносить больше ограничений на входные параметры в этом ограничении

наприме в A есть function myA(int $id) { if ($a > 10) throw new \Exception(); } то в B ты не можешь переопределить вот так function myA(int $id) { if ($a > 5) throw new \Exception(); } .... ибо для $a->myA(7) - валиден, а для $b->myA(7) - нет, будет ошибка, а код этого не ожидает

короче, код, который писался с огладкой на использование класса A - должен работаь и если ему передать B :)

Stephen
13.12.2017
16:28:09
короче, код, который писался с огладкой на использование класса A - должен работаь и если ему передать B :)
На первом сообщении начал понимать, а вот на примерах с ($a > n) сломалось в голове понимание) Хорошо, а если взять за пример условно те же бойлеры из статьи выше... $boilerBrandA->setDesirableTemperature(150); $boilerBrandB->setDesirableTemperature(150); Оба наследуются от абстрактного Boiler... И, допустим, brandB не поддерживает температуру 150. Тут тогда как быть?)

Dmitry
13.12.2017
16:31:06
о, как быть - это сложный вопрос ;)

Stephen
13.12.2017
16:32:35
о, как быть - это сложный вопрос ;)
Видимо, какой-то Exception определить? Других решений как-то не вижу))

Dmitry
13.12.2017
16:35:34
на самом деле пример у меня плохой, там как раз нарушения нет

а вот если в а исключения не было бы, а в б появилось, вот тогда будет

Stephen
13.12.2017
16:39:20
Очевидно же - не делать их братьями. Весь Барбара лисков о том, что не стоит пихать наследование там, где оно не пихается.
Хорошо, другой пример попробую. Представим классы SportCar и HeavyCar, наследующие абстрактный Car. В Car есть метод setSpeed($speed). Это уже получается нарушением принципа Лисков?

Ведь нельзя же будет просто так подменить экземпляр SportCar на HeavyCar.

Борис
13.12.2017
16:42:01
Нарушение будет, когда у тебя что то на вход принимает base Car, но работает, по факту, только с sort car. Если туда подсунуть heavy car то все сломается. Вот это нарушение.

Наследник не должен быть написан так, чтобы ломал тот код(сторонний код, третий код), который работает с потомком.

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

Dmitry
13.12.2017
16:44:26
наоборот мб?

потомок не должен ломать родителя?

потомок не должен ломать код, работающий с родителем?

хотя наследник это ведь тоже самое что и потомок

не наоборот, а под потомоком видимо имелся в виду родитель?

Stephen
13.12.2017
16:48:49
Ладно, спасибо, буду дальше вникать )

Dmitry
13.12.2017
16:58:03
смотри, был у тебя car, он принимал любой setspeed.... и ты не парился вообще, и везде делал ->setSpeed(); а потом появился heavycar и ты сидишь, думаешь... а как же сделать так,что бы нельзя было ставить ->setSpeed(250).... в принципе, любое, что придумаешь - скорее всего нарушит LSP. Кинишь исключение - но у тебя код, который раньше работал со спорткаром не ожидает исключение - программа просто упадет... проигнорируешь - тоже плохо, тебе скорость изменили, а ты не бе не ме... в принципе, можешь на ->setSpeed(250) поставить внутри $this->_speed = 80... но тут опять же, зависит от того, как объект используется, например, ты поставил скорость 250 и знаешь, что приедешь в город через час (посчитал), а реально - не приедешь, ибо реальная скорость 80 Как справляться? рефакторить, например ;)

Страница 831 из 1387