Явно указать тип переменных, которые должны быть переданны в функцию

Активист

Активист
Команда форума
Явно указать тип переменных, которые должны быть переданны в функцию

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

function myFunction(varType $myVar) {

}

Где varType - тип переменной, это работает с array, а как укзать другие типы переменных, например строки, целочисленное, с плавающей точкой и т.п.

-~{}~ 09.03.07 06:42:

В аналогии с array пробую

public function editClientGetDataFromSQL(integer $id) {

if (!$module->editClientGetDataFromSQL((int)$uriParams["client"])) ...

Возвращает ошибку:
Catchable fatal error: Argument 1 passed to clients::editClientGetDataFromSQL() must be an instance of integer, integer given, called in D:\Web\www\portal.localhost\htdocs\modules\clients\admin.php on line 45 and defined in D:\Web\www\portal.localhost\htdocs\modules\clients\__classes.php on line 1

В то же время конструкция

public function editClientGetDataFromSQL(array $id) {

if (!$module->editClientGetDataFromSQL(array($uriParams["client"]))) ...
Работает корректно.

PHP 5.2.1
WIN XP
 

Андрейка

Senior pomidor developer
а кто тебе сказал, что так можно, даже с array или someObject?? де такое написано? cссылку на мануал!! (потом сам же его и читать будешь)
 

Активист

Активист
Команда форума
Гравицапа
Спасибо, а то долго искал найти не мог.

Особенно огорчило
Traditional type hinting with int and string isn't supported.

А кто знает, планируется ли поддержка int, float, string?
На мой взгяд, с точки зрения безопасности кода не лишнее указать тип переменной, какую ждем в функции (например для того же уникльного ID, являюшейся integer), особенно, когда работа делается в комманде, кто-то где-то забыл привести тип - hack, а если явно указать в функции - то fatal error.
 

hermit_refined

Отшельник
а если явно указать в функции - то fatal error.
не слишком ли круто?..
семантика, например, 7 и "7" в php практически одинакова.
нравится/не-нравится - отдельный вопрос, но так есть.
и заставлять всех всегда писать $obj->method((int) $id, (bool) $flag) - тоже не очень хорошо.
когда нужно приведение типа - оно должно осуществляться в самой функции.

P.S. кстати, реализовать какую-нибудь checkFuncArgs('lsb'); - достаточно легко.
 

Активист

Активист
Команда форума
hermit_refined
Практически во всех языках программирования, начиная с quick basic 88 года внедрена возможность (а в некоторых языках просто необходимо) указывать тип переменной.

>не слишком ли круто?..
Что подразумевается под словом "круто". Указать какой тип переменной нам нужен?

А если посмотреть с другой стороны.
Допустим, в разработке ПО на PHP участвует 5 человек. Каждый занимается разработкой определенных классов, модулей и т.п.
На финише, они будут собраны в один большой продукт. Тоесть вся работа будет передана одному-двум веб программистам, которым понадобится все это соединены во едино.
Согласитесь, каждый человек пишет "в своем стиле", может допустить ошибки, или понадеется, что данные будут проверены в основном модуле этого ПО или кем-то раньше или вообще забудет привести типи полагаясь на "семантика, например, 7 и "7" в php практически одинакова." или еще что-то...

(7 и "7" это одинаковые "на вид", но разные внутри, этот как сравнивать земляного червя и гусеницу, и как итог, продукт может быть взломан, и вся работа будет "на смарку", из-за одного не приведенного типа)
 

jonjonson

Охренеть
Активист, а вы батенька теоретик... php - язык без чёткой типизации. Нужны вам типы, используйте Java или Python. А в чужом монастыре будьте скромнее. ;)
 

hermit_refined

Отшельник
и как итог, продукт может быть взломан,
приведите пример.
ошибки всегда могут привести к самым разным последствиям.
я бы даже сказал - для любой ошибки можно придумать такой код, в котором она окажется критической.
Согласитесь, каждый человек пишет "в своем стиле", может допустить ошибки
ти-ди-ди, говорят, помогает.
или понадеется, что данные будут проверены в основном модуле
да, безопасность (вернее - корректность) должна обеспечиваться - в том числе - и на самом низшем уровне.
 

serglt

Анус, ой, Ахтунг
Активист
С/C++ тебе в руки, а если руки кривые то и типизация не спасет. Достаточно приводить переменные в нужные типы и проверять.

Если в PHP добавить типы то это уже будет почти С. Вот на нем и вперед писать чудо проекты с антихаком. И дурацкие вопросы не задавать.
 

lorien

Новичок
Активист, а вы батенька теоретик... php - язык без чёткой типизации. Нужны вам типы, используйте Java или Python. А в чужом монастыре будьте скромнее.
А вы батенька, я смотрю, тоже теоретик.
Если вы имели в виду статическую типизацию, то в Python она динамическая ;-)
 

Активист

Активист
Команда форума
Я не говорил про обязательность, а про возможность.

array и someObj сделали, почему бы не сделать int, string.
Кому надо, тот бы пользовался.
 
Сверху