@prophp7

Страница 1243 из 1387
F01134H
08.08.2018
11:45:58
Причем тут шаблоны

Anton
08.08.2018
11:46:12
При том, что ковариантность и контравариантность это про шаблоны

F01134H
08.08.2018
11:46:21
Нет

Это про наследование офк

Google
Anton
08.08.2018
11:46:39
И ты говоришь, что T либо ковариантный, либо контравариантный

F01134H
08.08.2018
11:46:51
Шаблоны вообще не при чем

Мне кажется ты взял первый попавшийся пример из википедии и неправильно интерпретировал

Anton
08.08.2018
11:47:12
И от этого зависит, что чей подтип, либо List<Object> подтип List<String>, либо наоборт List<String> подтип List<Object>

А скинь тогда другое определение ковариантности

> Variance refers to how subtyping between more complex types relates to subtyping between their components

F01134H
08.08.2018
11:48:39
где там слово шаблон)

да я ща пример скину

https://repl.it/@AndreyVolkov/Contrvariant

т.е. в пхп нельзя уточнить, что у нас коту не абстрактный Food приходит, а конкретный Meat. Поэтому приходится food херачить как в интерфейсе

f4rt~
08.08.2018
11:54:10
https://repl.it/@AndreyVolkov/Contrvariant
Попался Andrey Volkov Contrvariant'ович

Anton
08.08.2018
11:55:57
Все верно, ковариантность применима в этом контексте, а я был неправ

Только получается PHP в этом плане для входных параметров инвариантен, потому что нельзя заменить ни Food на Meat ни Meat на Food

Google
Anton
08.08.2018
11:57:29
В методе eat()

F01134H
08.08.2018
11:57:59
Да, нельзя

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

Anton
08.08.2018
12:00:05
Кроме конструкторов

Пишет википедия

в плане аргументов конструктора PHP ковариантен

F01134H
08.08.2018
12:00:32
Срсли? Интересно

Sergey
08.08.2018
12:00:45
Вот это плохо. Кот не 'nom nom'))

Anton
08.08.2018
12:00:54
https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science) вот тут в середине

Впринципе ковариантность в конструкторе наверное не ломает type safety

F01134H
08.08.2018
12:01:57
стоп, а конструктор жеж и в интерфейс не запихнешь)

ну, если по правильному

Evgeny
08.08.2018
12:02:18
конструкторы не часть интерфейса объекта же

F01134H
08.08.2018
12:02:34
но вообще факт интересный

Anton
08.08.2018
12:02:36
да

Ну и для полноты картнины, раз уж затронули тему, возвращаемые значения тоже инвариантны

https://wiki.php.net/rfc/return_types

F01134H
08.08.2018
12:03:14
так и есть да

Anton
08.08.2018
12:03:16
> The enforcement of the declared return type during inheritance is invariant; this means that when a sub-type overrides a parent method then the return type of the child must exactly match the parent and may not be omitted. If the parent does not declare a return type then the child is allowed to declare one.

F01134H
08.08.2018
12:03:20
я уже выше об этом сказал)

Google
Anton
08.08.2018
12:03:43
Да

не заметил

Sergey
08.08.2018
12:05:17
Спасибо что помогли понять почему всё так происходит

Anton
08.08.2018
12:05:21
Вот RFC, про который выше говорили уже https://wiki.php.net/rfc/parameter-no-type-variance В 7.2 можно удалять тип из аргументов

Настоящую вариантность написано там не сделаешь в PHP потому что сложно технически

F01134H
08.08.2018
12:06:30
Я жду типизацию свойств наконец, что бы можно было выкинуть геттеры с сеттерами (по крайней мере в 90% случаев)

Anton
08.08.2018
12:07:30
Век живи. Я если честно считал что про вариантность нету смысла говорить не в контексте дженериков

Evgeny
08.08.2018
12:07:33
зачем ждать? бери сишарп и пиши, фулл типизация

F01134H
08.08.2018
12:08:17
ноу сенкс

F01134H
08.08.2018
12:08:33
если я и буду изучать другой яп, то с другой парадигмой

Dmitry
08.08.2018
12:21:19
Вот RFC, про который выше говорили уже https://wiki.php.net/rfc/parameter-no-type-variance В 7.2 можно удалять тип из аргументов
это исключительно для bc и никак иначе, имхо, использоваться не должно

Anton
08.08.2018
12:22:01
почему

ну это впиливали для DateTime судя по описанию, но почему нельзя это юзать? Ведь LSP не нарушается в этом случае

Sergey
08.08.2018
12:32:51
Получается в моем случае не указывать тип и делать проверку внутри метода?

F01134H
08.08.2018
12:34:17
да

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

Artem
08.08.2018
12:38:28
Шикарная презентация. Спс
там ещё 2 есть на этом сайте про то же примерно =)

Dmitry
08.08.2018
12:39:20
99 слайдов за глаза. Прикольно, то что показаны примеры, которые позже фигурирует у Н. Попова в статье про мультизадачность

Google
Dmitry
08.08.2018
12:42:31
ну это впиливали для DateTime судя по описанию, но почему нельзя это юзать? Ведь LSP не нарушается в этом случае
написано же зачем впиливали Implementing this RFC would allow libraries to be upgraded to use type declarations in their method signatures. Currently adding types to a method of a class in a library would break any code that extends that class. This would provide an easier upgrade path for libraries to start using scalar types, to replace manual checks being done inside the methods, without requiring an update for all sub-classes.

DanRotaru
08.08.2018
13:04:18
Кто может помочь

Dmitry
08.08.2018
13:04:55
Кто может помочь
Чип и Дейл, очевидно

DanRotaru
08.08.2018
13:05:56
В версии 5.6 код PHP определялся так: <?php , <? ... Перешёл на версию 7.0 теперь код определяется только так <?php

Можно как-то сделать чтоб определялся <? ..

Dmitry
08.08.2018
13:06:28
использование short синтаксиса считается очень плохой практикой, этого лучше избегать (<?)

DanRotaru
08.08.2018
13:06:45
Почему

Bohdan
08.08.2018
13:06:47
более того, вроде бы в 7.2 выпилили его

^ вот поэтому

Admin
ERROR: S client not available

Bohdan
08.08.2018
13:07:17
В html
изыди, извращенец

Dmitry
08.08.2018
13:07:27
<?= ?> - это другое

DanRotaru
08.08.2018
13:07:34
Я свой проект сделал с <? , решил перейти на php7 а тут это не работает

Dmitry
08.08.2018
13:07:48
вообще, https://stackoverflow.com/questions/2185320/how-to-enable-php-short-tags

Vladimir
08.08.2018
13:07:51
изыди, извращенец
<?= ?> лучший друг

Dmitry
08.08.2018
13:08:17
но лучше замени у себя все на <?php ибо это не последний раз, когда ты с этим сталкиваешься

Vladimir
08.08.2018
13:08:34
Также как <? if ?> <? endif?> форыч и тд

Bohdan
08.08.2018
13:08:36
https://softwareengineering.stackexchange.com/questions/151661/is-it-bad-practice-to-use-tag-in-php

Google
Vladimir
08.08.2018
13:10:26
В этой статье тупа срачи

DanRotaru
08.08.2018
13:10:50
Я использовал <? и никаких проблем не возникало

Vladimir
08.08.2018
13:10:52
<?= ?> - это другое
И да в 7.0+ это все робит

DanRotaru
08.08.2018
13:11:02
Так же с <?=

Vladimir
08.08.2018
13:12:49
Я использовал <? и никаких проблем не возникало
Ну если ты это всегда использовал то фу

Это плохая практика

Переписывай

DanRotaru
08.08.2018
13:13:13
Почему плохая то?

Vladimir
08.08.2018
13:13:25
Потому чтто умные дяди сказали

Во всех манулах где есть краткий синтаксис говорится что его не надо юзать

Bohdan
08.08.2018
13:20:32
потому, что это называется "единым стандартом"

Dmitry
08.08.2018
13:21:58
Еще например <?xml с шорт синтаксисом php будет пытаться выполнить

<?= такого нет, его в общем можно использовать, но в будущем его вроде тоже могут выпилить

Shmaltorhbooks
08.08.2018
13:25:25
https://www.php-fig.org/psr/psr-1/

пункт 2.1

Почему плохая то?
это ответ на этот вопрос

Vladimir
08.08.2018
13:26:16
<?= такого нет, его в общем можно использовать, но в будущем его вроде тоже могут выпилить
Учитывая что его юзают абсолютно все, не думаю что его выпилят

Это придется тонны вывода переворачивать)

F01134H
08.08.2018
13:26:38
Учитывая что его юзают абсолютно все, не думаю что его выпилят
абсолютно все его стараются обходить стороной

и вообще юзать шаблонизаторы надо в 2018

DanRotaru
08.08.2018
13:29:30
Еще например <?xml с шорт синтаксисом php будет пытаться выполнить
А если к примеру я не использую другие такие же синтаксисы

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