Scalar type hints в PHP

newARTix

Новичок
Мое имхо, синтаксис типа foo()[2] нужен очень редко, а учитывая что по хорошему нужно еще проверить, а вернула ли функция массив и есть ли в нем этот ключ, то профит вообще сводится к нулю. Так что радости не разделяю. Будет еще больше говнокода.

Лично я вместо foo()[2], когда это нужно (ОЧЕНЬ редко, и когда ОЧЕНЬ лень) использую небольшой хелпер: array_cell(foo(),2);

А сабж дело нужное, во всяком случае лишним не будет.
 

craz

Нестандартное звание
объекто-массив - это такая хня которую в моск написать приходит каждому программисту наверное.
но он нах не нужен никому, потому как вместо того чтобы писать костыли на ЯП, надо реализовывать все, его доступными методами - только потому, что в мире вы не один программист...
поэтому не пишут расширения ПХП, на каждый чих, а только в случае если надо сделать какую-то узкоспециализированную фичу - ООмассив не узкоспециализированный.

Вот когда он будет реализован на ЯП, тогда и надо будет его использовать, но не раньше. Это как если бы у бабушки был ... она была бы дедушкой - но у нее нет.
 

Wicked

Новичок
Мое имхо, синтаксис типа foo()[2] нужен очень редко, а учитывая что по хорошему нужно еще проверить, а вернула ли функция массив и есть ли в нем этот ключ
а вот для этого по-хорошему нужны эксепшены
 

fixxxer

К.О.
Партнер клуба
ArrayObject то на что блин.

вся проблема в том что невозможно использовать array() и ArrayObject взаимозаменяемо.
 

newARTix

Новичок
Wicked
Не понимаю какой от них толк в данном случае, если функция не генерит эксепшен, и может возвращать разные типы данных и массивы разной структуры.
В данном случае я говорю не о том какие лучше писать функции, а о том как удобнее работать с результатами уже написанных. В том числе встроенных стандартных функций.
 

Вурдалак

Продвинутый новичок
newARTix, попытка доступа к элементу массива происходит после отработки функции, т.е. это оператор доступа [] может выбрасывать исключение.
 

newARTix

Новичок
Вурдалак
что значит "может"? А может и не выбрасывать. Как сейчас-то обстоят дела?
Хотя даже если эта конструкция будет выбрасывать исключения, не будет ли это выбиваться из общей картины? Другие конструкции языка ведь их не выбрасывают. Эта конструкция конечно особенная, но настолько ли... Короче при всей мизерности, изменение более чем спорное.

-~{}~ 09.08.10 19:41:

Хотя может как раз пора внедрить какую-нибудь настройку в ядро, чтобы оно вместо всех runtime ошибок генерило исключения? Таких планов случайно нет?
 

Вурдалак

Продвинутый новичок
newARTix, «может» — значит они могут так реализовать. Релиза ещё не было, могут ещё всё сто раз поменять. Я лишь отвечаю на твой вопрос как это вообще возможно сделать.

-~{}~ 09.08.10 19:46:

Wicked, насколько я понимаю, имел в виду что эту фичу требуется добавить разработчикам PHP, а не нам.
 

newARTix

Новичок
Вурдалак
даже если конструкция будет выбрасывать исключения, кто-то их должен ловить. То есть на практике код будет еще длиннее и менее читабелен чем привычное:

$res=foo();
if(is_array($res) && array_key_exists(2,$res)) { ... }

То есть получается преимуществ вообще никаких.
 

Вурдалак

Продвинутый новичок
newARTix, для одной строчки никто try catch обычно и не пишет. У тебя всё приложение должно быть построено на exception'ах. Это и подразумевается.
 

korchasa

LIMB infected
Вурдалак
А вообще прецеденты выброса исключения языком есть? Давно пора, если честно.
 

newARTix

Новичок
Вурдалак
оппа. А вот это уже совсем другое дело. Спасибо :) Все гениальное просто... и ведь видел десять раз уже, а все-равно забыл.
 

iceman

говнокодер
triumvirat
м.б. тебе выучить другой язык, который будет "лучше"
 

craz

Нестандартное звание
iceman
ладно вам отстаньте вы от него во всех темах уже гнобите

не нравиться, что пишет не замечайте, мне вот интересно подискутировать
 

Wicked

Новичок
все, что я имел в виду - это "мля, ну почему пхп - не питон?!!!" :)

Код:
>>> def a(): return 1
... 
>>> a()[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is unsubscriptable
>>> def a(): return []
... 
>>> a()[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> def a(): return ['a', 'b', 'c']
... 
>>> a()[1]
'b'
когда эксепшены станут стандартным методом сообщения об ошибках в пхп (встроенных ф-ях, экстеншенах, сторонних библиотеках)? никогда

-~{}~ 11.08.10 11:11:

А как на ErrorException построить нормальную иерархию эксепшенов?
if (strpos($errstr, 'Wrong parameter count for')) {
throw new CallException(...);
} elseif (...) {}
 

point

Новичок
> А как на ErrorException построить нормальную иерархию эксепшенов?
if (strpos($errstr, 'Wrong parameter count for')) {
throw new CallException(...);
} elseif (...) {}

Можно error_code использовать. Но это тоже не комильфо. Сейчас маюсь с такой же дилеммой.
 

Вурдалак

Продвинутый новичок
Т.к. официально такой классификации ошибок нет, то и придумывать тут ничего не стоит, IMHO. Зачем это вам вообще?
 

Wicked

Новичок
Вурдалак
в питоне есть и этим удобно пользоваться
а в пхп нету, и, значит, незачем
ок :)
 

Вурдалак

Продвинутый новичок
Wicked, не надо передёргивать. Я лишь против костылей.

-~{}~ 11.08.10 19:34:

По сути это другой стиль программирования, где минимум проверок.

Кстати, серьёзно, а что мешает перейти на другой язык типа Python? Я бы не прочь на C# писать (ASP.NET), но Windows-среда пока что отпугивает. Хочется попробовать Python и Ruby.
 
Сверху