Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Scalar type hinting в PHP 5.4.X или 6.X

Ну и раз уж я решил перед сном пописáть о PHP, то продолжу. Ещё новость из мира PHP — в PHP будет scalar type hinting. Илья Альшанетский добился включения своего патча в код.

Сейчас type hinting в PHP есть, я могу указать явно, что параметр будет объектом определённого класса или массивом:

function test1(MyClass $var) {}

function test2(array $var) {}

Скоро можно будет указать, что передаваемый аргумент должен быть скаляром. Жаль только, что появилась только возможность указать определённый тип. Если «object» указать можно, то «scalar», к сожалению, нет. Это странно. Придётся указывать явно:

function test3(string $var) {}

Что поможет снизить количество ошибок в отдельных случаях, но как быть, если мне такая жёсткость ни к чему, если я хочу оставить возможность преобразования типов, там где это сделано хорошо (преобразование типа «array» в «string» в PHP сделано бессмысленно, посмотрите на Perl, там это имеет смысл)? Да и как мне указать, что мне всё равно — придёт int или float? Видимо, только явным приведением типа при вызове, а про возврат значения по ссылке, в этом случае, придётся забыть.

В отдельных случаях, хотелось бы, чтобы передав объект в такой типизированный параметр, у объекта дёрнулся метод __toString, а то и __toNumber, если указано, что должен быть передан числовой скаляр.

Надеюсь, не одному мне этого хочется и Илья продолжит работу над патчем.

Добавлено через несколько минут: прочитал комментарии, оказывается идут дискуссии о добавлении ключевых слов «scalar» и «numeric». Кроме того, Илья рассуждает и о преобразованиях типов в рамках type hinting. Ура.

8 комментариев
fantaseour.livejournal.com 2010

дерганье __toString, если заявлено function f(string $x);
очень хочется, да.

Евгений Степанищев (bolknote.ru) 2010

Комментарий для fantaseour.livejournal.com:

Жаль __toNumber нет. Иногда пригодилось бы.

jimidini (jimidini.ya.ru) 2010

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

Евгений Степанищев (bolknote.ru) 2010

Комментарий для jimidini.ya.ru:

Ммм… жаль будет, если откатят. А какой предлагается альтернативный подход?

jimidini (jimidini.ya.ru) 2010

Комментарий для Евгения Степанищева:

вот альтернативный: http://wiki.php.net/rfc/typecheckingstrictandweak

Евгений Степанищев (bolknote.ru) 2010

Комментарий для jimidini.ya.ru:

Этот вариант мне ближе.

jimidini (jimidini.ya.ru) 2010

Комментарий для Евгения Степанищева:

интереснее, что в php-trunk добавили http://wiki.php.net/rfc/functionarraydereferencing
вот это действительно праздник

p.s. не знаю видел ты или нет, я завёл англоязычный твиттер технической направленности http://twitter.com/jimi_dini

Евгений Степанищев (bolknote.ru) 2010

Комментарий для jimidini.ya.ru:

интереснее, что в php-trunk добавили http://wiki.php.net/rfc/functionarraydereferencing

вот это действительно праздник
О!!!! Ура :)

p.s. не знаю видел ты или нет, я завёл англоязычный твиттер технической направленности http://twitter.com/jimi_dini

Я твиттером не пользуюсь, но зафолловил.