
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

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
ноу сенкс

Denis
08.08.2018
12:08:28

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

Dmitry
08.08.2018
12:21:19

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

Dmitry
08.08.2018
12:26:08

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

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

Artem
08.08.2018
12:38:28

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

Google

Dmitry
08.08.2018
12:42:31

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

Vladimir
08.08.2018
13:07:00
В html

Bohdan
08.08.2018
13:07:17

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

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