@prophp7

Страница 1289 из 1387
Andrew
09.09.2018
21:01:26
@ExileeD https://paste.ofcode.org/4y8bD9VLpAJZDpKrHrkhLE

и так по кругу

не влезло все

раз 15 прошло одно и тоже что по ссылке

Google
Dmitriy
09.09.2018
21:02:26
комплируется же

Andrew
09.09.2018
21:03:57
по кругу?)

ltkfk rcnfnb bp ja ljrjd

https://confluence.atlassian.com/bitbucket/laravel-with-bitbucket-pipelines-913473967.html

ivan
10.09.2018
04:58:53
Hello. Почему в __toString() нельзя бросать Excception ?

Andrew
10.09.2018
05:37:44
Hello. Почему в __toString() нельзя бросать Excception ?
https://stackoverflow.com/questions/2429642/why-its-impossible-to-throw-exception-from-tostring

ivan
10.09.2018
05:39:51
"there is no way to ensure that an exception thrown during a cast to string would be handled correctly by the Zend Engine" блин. (

Andrew
10.09.2018
05:47:46
Вот только зачем?

ivan
10.09.2018
05:48:56
Мне не нужен обходной путь. Просто хочу видеть весь трейс когда возникает ошибка.

ivan
10.09.2018
06:29:59
Посмотри в том вопросе ниже
я не хочу в каждом методе tostring писать trycatch)

Maksim
10.09.2018
06:31:37
Если в toString есть логика, которая может выбросить эксепшен, то чет код воняет

Google
ivan
10.09.2018
06:39:31
Если в toString есть логика, которая может выбросить эксепшен, то чет код воняет
why? К примеру: class TipOfTheDay(\DateTime $time) { public function __toString(){ return \to_camel_case( $this->db->fetchOne(' Select tip from tips where day = ? ', $this->time->format('y-m-d')) ); } }почему код плохой? Метод toString получается вообще костыль, так как мы должны думать о реализации методов которые мы вызываем.

Maksim
10.09.2018
06:40:35
Я б за такую херню тупо уволил. И, да, toString - своего рода костыль. Но это не значит, что надо такой мрак в нём творить

Alexander
10.09.2018
06:44:07
Я б за такую херню тупо уволил. И, да, toString - своего рода костыль. Но это не значит, что надо такой мрак в нём творить
Можно еще метровой стальной линейкой по рукам постучать, чтобы неповадно было

Maksim
10.09.2018
06:44:44
Можно еще метровой стальной линейкой по рукам постучать, чтобы неповадно было
Не, пускай другие стучат. Если человек додумался так сделать, стучать уже бесполезно)

Alexander
10.09.2018
06:45:53
Не, пускай другие стучат. Если человек додумался так сделать, стучать уже бесполезно)
Я бы не хотел, чтобы сотрудник, которого я уволил, на новом месте работы сказал, что это он у нас научился ?

ivan
10.09.2018
06:47:16
Поэтому я и не пишу ничего в методе __toString и вообще его не юзаю. Хотя он должен привнести более удобное написания кода. Я хочу описать класс Tip и он будет представлять собой string. Как он будет ее генерировать - это не проблема представления. Кароче toString надо делать deprecated)

Alexander
10.09.2018
06:49:48
Должен быть отдельный класс, который порождает объекты Tip а Tip.__toString будет простым return $this->text;

Alexander
10.09.2018
06:51:19
зачем и почему?
Затем, что не стоит в одном классе мешать логику получения данных и логику представления

А toString это уровень представления

Борис
10.09.2018
06:53:20
__toString это рабочий метод, для представления объекта в одну строку для какого-нибудь debugger. Вообще его спиздили с Джава, и как все что спижжено с Джава, не до конца проработано. Его просто не нужно использовать в своем бизнесс коде. Максимум, в каких-то дебаг либах, быть может. А то что ты в toString лезешь в БД - тут да, только уволить

ivan
10.09.2018
06:53:35
Затем, что не стоит в одном классе мешать логику получения данных и логику представления
Что такео логика представления? К примеру psr7 UriInterface::__toString - логика представления или нет?

Артур Евгеньевич
10.09.2018
07:06:31
debugInfo имеешь ввиду, или что то новенькое?

ivan
10.09.2018
07:12:14
ну да. v - view) srp - в курсе. не понятно почему TipOfTheDay - представление. Получается мне всегда надо юзать dto - для представления данных и юзать factory для создания этих объектов. Все верно?

Google
Alexander
10.09.2018
07:14:13
ivan
10.09.2018
07:18:00
чем лучше дата провайдер и dto чем держать логику в объекте? Объект это и есть поведение, или я не прав?

Alexander
10.09.2018
07:27:38
чем лучше дата провайдер и dto чем держать логику в объекте? Объект это и есть поведение, или я не прав?
Логика бывает разной. Получение данных таки - логика отдельного класса, который только этим и занимается. А так у тебя на одном классе многовато ответственностей висит

Он у тебя знает и как получить данные, и как работать с ними, и даже как представить их пользователю. Не многовато ли?

ivan
10.09.2018
07:30:26
Alexander
10.09.2018
07:31:16
Пока вроде ничего лишнего

ivan
10.09.2018
07:33:24
class RandomJoke{ public function getJoke(){ return array_rand($this->db->fetchAll('select text from jokes limit 3 order by time')); } }Так норм?. Правильно ли я понимаю - вас напрягает форматирования текста (то есть представления)?

Sergey
10.09.2018
07:34:36
мало ли тебе понадобится не рандомный

ну и в целом как коллекцию проще это воспринимать

или тебе понадобится 5 рандомных

ivan
10.09.2018
07:35:48
лучше так: class Jokes { public function random(): string { return array_rand(['foo', 'bar']); } }
Jokes::todayJoke() Jokes::topJoke() Jokes::random() Jokes::randomFromGroup() ?

Sergey
10.09.2018
07:36:27
Jokes::todayJoke() Jokes::topJoke() Jokes::random() Jokes::randomFromGroup() ?
возможно стоит разбить на разные инттерфейсы

но это от задачи зависит и от того как методы юзаются

ivan
10.09.2018
07:36:41
или тебе понадобится 5 рандомных
да. Список: new JokeFromList(new TodaysTopJokes()) new JokeFromList(new RandomJokes()) new JokeFromList(new Top10Jokes())

Alexander
10.09.2018
07:38:20
class RandomJokes implements JokeProvider { public function getJoke(): Joke { return array_rand([new Joke('foo'), new Joke('bar')]); } } class DailyJokes implements JokeProvider { public function __construct(\DateTimeInterface $today) { $this->today = $today; } public function getJoke(): Joke { return new Joke($this->db->fetchFromJokesTableByDate($this->today)); } } Если хочешь пользоваться методом __toString class Joke { public function __constuct(string $text) { $this->text = $text; } public function __toString() { return $this->text; } }

ivan
10.09.2018
07:39:14
но это от задачи зависит и от того как методы юзаются
к примеру у меня сайт из шутками про рнр. Я показываю только рендомни шутки. Для чего мне дата провайдеры - если я могу реализовать JokeInterface::getText и не создавать dto ?

Alexander
10.09.2018
07:45:00
к примеру у меня сайт из шутками про рнр. Я показываю только рендомни шутки. Для чего мне дата провайдеры - если я могу реализовать JokeInterface::getText и не создавать dto ?
если у тебя сайт кроме шуток про пхп ничего ничего не делает, то тебе вовсе классы не нужны тут) можно процедурно всё написать и будет эффективнее, быстрее и проще

Google
ivan
10.09.2018
07:45:53
Логика объекта должна быть скрытая - а мы забираем с объекта логику и забрасывают ее в дата провадеры. Мы начинаем гонять данные между объектами.

Alexander
10.09.2018
07:50:39
JokesList — вполне может содержать логику получения данных, это получается вполне себе такой репозиторий

Sergey
10.09.2018
08:06:54
к примеру у меня сайт из шутками про рнр. Я показываю только рендомни шутки. Для чего мне дата провайдеры - если я могу реализовать JokeInterface::getText и не создавать dto ?
1. Не JokeInterface а Jokes 2. не getText а get или random в твоем случае 3. В DTO прекрасно ложатся любые структуры данных, в случае php у тебя есть массивчики. 4. Сегодня тебе нужна только строка, завтра тебе понадобится выводить сколько эту шутку залайкало людей, потому лучше что бы данные которые возвращаются в представление были бы все же завернуты во что-то что бы позволить расширять все в будущем. Опять же массивчики неплохой выбор.

Sergey
10.09.2018
08:15:31
1. ок. 2. не ок. я не хочу держать в Jokes различные методы. лучше напишу метод first или сделаю Jokes::all():\Generator и буду елдить Joke 3. масив не типизированные 4. Есть резон. Спс
2. не хочешь - не держи. 3. вопрос инструментов и отсутствия нативной возможности описать тип массива. С другой стотроны, динамические структурки это единственное преимущество php перед нормальными языками. Ну и штуки типа psalm умеют в array shapes.

Admin
ERROR: S client not available

Sergey
10.09.2018
08:18:04
странно почему шторм до сих пор не умеет
1. psalm юзает php-parser, который четкий и понятный. шторм юзает свой парсер (потому что это IDE и 80% времени ему надо разбирать невалидный код), что сильно усложняет дела. 2. в phpstorm свой парсер докблоков 3. нет никаких стандартов определяющих как задавать типы для array shapes. Может быть в phpdocumentator добавят и тогда уже будут дела идти.

это как с дженериками. Сейчас в дженерики более-менее умеет только psalm и phan. Шторм все еще оперирует своими Foo[]|ArrayCollection

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

p.s. интересно чем закончилась дискуссия на тему "а давайте мы просто синтаксис добавим что бы статический анализ можно было делать но на рантайм бы он не влиял"

Maksim
10.09.2018
08:22:11
ну здесь и сейчас про псалм знают единицы. Следуют его советам и того меньше. пока такая ситуация остаётся, толку от него не особо много

Sergey
10.09.2018
08:23:53
давай так, псалм пилит 1-2 человека, это типа не сурьезно. Но хоть что-то

p.s. если хочешь поблевать - посмотри исходники typescript-а

Maksim
10.09.2018
08:24:47
да понятно, что лучше, чем ничего и жрать надо, что дают, но всё же хочется светлого будущего на сколько это возможно)

Sergey
10.09.2018
08:25:05
а ты готов перейти на имутабельность?

Google
ivan
10.09.2018
08:25:07
Например мне надо объект "Шутка" Я хочу увидеть все возможные способы его конструирования и выбрать для себя оптимальный - или написать новый. Если мы юзает всегда датапровйдер - ок. Ищем кто конструирует объекты и нет проблем. Но если в некоторых случаях мы напрямую в DTO забрасываем данные (например в контроллере) тогда уже трудно разобраться среди большого количества строк - как реально создать объект. и сложно выбрать подходящий. Поэтому и подумал что создавать объект который будет содержать алгоритм работы - норм.

Maksim
10.09.2018
08:25:15
ivan
10.09.2018
08:28:06
пробовал - не катит. Вы же не всегда будете писать билдеры. И получается что когда вам нужно объект определенного типа вам приходится искать реалзации этого типа + использование конструкторов.

Спасибо всем. Некоторые моменты для себя прояснил;)

Alexander
10.09.2018
08:29:37
изначальный вопрос был "почему в __toString нельзя эксепшн кидать"

и пример кода, где в __toString было $this->db->fetchOne

ivan
10.09.2018
08:32:03
Основной вопрос - почему объект не может скрывать логику создания данных.

Alexander
10.09.2018
08:33:10
Основной вопрос - почему объект не может скрывать логику создания данных.
может, но только не тот объект, который эти данные в себе хранит

Sergey
10.09.2018
08:33:20
ivan
10.09.2018
08:33:25
и пример кода, где в __toString было $this->db->fetchOne
Хотел что бы код вот так выглядел $joke = new RandomJoke(); echo $joke;- но из-за ограничений в рнр - так нельзя.

Alexander
10.09.2018
08:34:06
$joke = $joker->getJoke(); echo $joke;

$joker = new RandomJokeProvider();

если лишняя строчка кода мешает, то напиши так echo (new RandomJokeProvider())->getJoke();

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

Dmitry
10.09.2018
08:39:52
(new RandomJokeProvider())() =)

Alexander
10.09.2018
08:41:06
(new RandomJokeProvider())() =)
https://i.gifer.com/5z3s.gif



F01134H
10.09.2018
10:42:04
а ты готов перейти на имутабельность?
Готов перейти на темную сторону?

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