| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Это баг php или нечто другое? |
| Автор: mark2009 4.7.2012, 12:32 | ||
| Доброго времени суток, Итак... на борту PHP 5.4.3. Имеем следующий класс:
Проблемная функция user_exists. Дело в том, что в качестве аргумента должно передаваться числовое значение. PHP позволяет указать тип аргумента непосредственно в функции. Указываем... Если передаём в качестве реального аргумента строку, то получаем: Catchable fatal error: Argument 1 passed to user::user_exists() must be an instance of integer, string given, called in /wwwsites/forum/index.php on line 12 and defined in /wwwsites/forum/classes/class_user.php on line 82 НО: если передаём число, то получаем: Catchable fatal error: Argument 1 passed to user::user_exists() must be an instance of integer, integer given, called in /wwwsites/forum/index.php on line 12 and defined in /wwwsites/forum/classes/class_user.php on line 82 Где логика? Если я передал string - понятно. Но из второго сообщения я ровным счётом ничего понять не могу... integer должно передаться, integer и передалось что явствует из сообщения об ошибке... и всё равно выдаётся ошибка? Может быть я что-то не так делаю? |
| Автор: IBS 4.7.2012, 13:01 |
| php почти не знаю, но я думаю дело в том, что $user_id уже была объявлена в этом классе, т.е. в функции возникает неоднозначность |
| Автор: mark2009 4.7.2012, 13:05 | ||
| IBS, Если не знаете, зачем тогда пишете? Это всего лишь аргумент функции. Никакой неоднозначности нет. P.S. Код
даёт тот же самый эффект. |
| Автор: Sentox 4.7.2012, 13:20 |
| а что даёт проверка is_int($user_id) и если заменить в сигнатуре integer на int |
| Автор: MoLeX 4.7.2012, 13:32 |
| вроде нерабочий функционал, хотя могу и ошибаться |
| Автор: baldina 4.7.2012, 14:08 | ||
если это массив или объект, а не скалярный тип. Вас не смутило слово instance?
http://php.net/manual/en/language.oop5.typehinting.php Добавлено через 2 минуты и 49 секунд php язык весьма странный. похож на лоскутное одеяло, местами в дырках, но с новой подкладкой. хотя одеяло тёплое и симпатишное (особенно подкладка), но в дырки дует. |
| Автор: Sentox 4.7.2012, 18:55 | ||
| Ответ здесь http://phpmaster.com/type-hinting-in-php/
В 5.4 не будет добавлена возможность скалярных величин. Хотя здесь http://habrahabr.ru/post/136800/ утверждает обратное. |
| Автор: SamDark 4.7.2012, 20:16 |
| Скалярные величины не будут добавлены никогда. По крайней мере таково мнение Лердорфа. |
| Автор: baldina 5.7.2012, 13:01 |
| видимо потому что это сводит на нет автоматические преобразования типа. конечно можно сохранить преобразования и добавить типизацию , но это приведет к усложнению синтаксиса. для интерпретируемого языка без встроенных средств предварительной компиляции это роскошь |
| Автор: Sentox 5.7.2012, 14:03 |
| А мне если честно не хватает несколько таких вещей иногда. Больше привык с однозначными переменными работать не жели преобразования. |
| Автор: mark2009 5.7.2012, 14:23 |
| Понятно. Всем спасибо за ответы. Хотя мне, если честно, не хватило указания типа скалярной величины... Ну ладно. Ещё раз всем спасибо. |