| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > тип аргумента функции |
| Автор: Goganchic 16.11.2008, 10:10 | ||||
| Всем привет! Долгое время я не программировал на PHP и вот недавно начал вспоминать. Столкнулся с такой ламерской ошибкой. Пишу простой пример:
И при запуске получаю ошибку:
И что-то я никак не пойму, из-за чего ошибка-то. Если убрать тип аргумента (string в конструкторе и функции execQuery) то вроде все работает, но это ведь как-то неправильно, ибо я не хочу чтобы мне передавали в эту функцию аргумент типа, отличного от строки. PHP Version 5.2.4. Подскажите пожалуйста что я делаю не так. |
| Автор: skyboy 16.11.2008, 10:27 |
| для начала сделай конструкток - конструктором. у тебя же PHP 5, а ты пользуешься формой записи конструктора для 4. возможно, это как-то связано. |
| Автор: Goganchic 16.11.2008, 10:34 |
| skyboy, уже сделал - не помогло |
| Автор: solenko 16.11.2008, 11:11 |
| Проверка типов аргументов работает только для классов, а не для элементарных типов даных |
| Автор: ksnk 16.11.2008, 11:41 | ||||
а ниче и не поменялось
Расшифровка - это вам, батенька не С. Не выпендривайтесь Типы лучше проверять по старинке, вручную. А так как сделано это в php5-м, imho, нужно было только для самоудовлетворения авторов языка... |
| Автор: solenko 16.11.2008, 12:12 | ||
Да ладно. Все очень даже логично. Проверка выполняется для типов, преодразование между котороми выполнить автоматически невозможно |
| Автор: ksnk 16.11.2008, 12:53 | ||
| solenko, imho, нелогична неполнота. Почему не сделана проверка на элементарные типы? Разве это сложнее, чем вставить проверку корректного наследования объектов? Добавлено через 4 минуты и 23 секунды
Не понимаю смысла фразы... Можно поподробнее? "Объектный тип праметра" подразумевает, что в качестве параметра может быть передан объект, унаследованный от обозначенного. Вроде никакого дополнительного смысла я не знаю... |
| Автор: skyboy 16.11.2008, 17:28 |
| Goganchic, тема помечена решенной - ты нашел решение? или по ошибке пометил решенной? |
| Автор: solenko 16.11.2008, 21:13 | ||||
Нелогично было бы если б в языке с нечеткой динамической типизацией вдруг появилась автоматическая проверка типов )
Я хотел сказать, что стандартные типы могут быть преобразованы из одного в другой автоматически. Вроде как РНР дложен автоматически разруливать проблеммы с неправильным типом аргумента путем преобразования типа (ну эт я конечно забыл о array, function, object). С пользовательскими объектами же непонятно как поступить, по каким правилам пробразовывать. |
| Автор: ksnk 16.11.2008, 21:50 |
| А кто говорит об автоматической проверке типов? Нет желания проверять тип - не указывай. Есть желание - напиши int или string, никакой автоматики Никакого противоречия, кроме нежелания авторов, я ненахожу. Наличие такой фичи никому не помешало бы. |
| Автор: Goganchic 18.11.2008, 11:59 | ||
понял что эта фишка не работает со стандартными примитивными типами, поэтому ответ на вопрос я получил |
| Автор: sTa1kEr 19.11.2008, 01:23 | ||||||
Вы это скажите авторам, которые http://pecl.php.net/package/SPL_Types пишут.
Потому что в PHP есть такое понятие, как "автоматическое приведение типов". И если бы они это сделали для элементарных типов, то было бы крайне тяжело потом объяснить "почему '5' - это не integer"
Не получится, т.к. противоречит философии PHP. Пришлось бы делать строгую типизацию для всех типов данных. Добавлено через 1 минуту и 32 секунды И, кстати, если уж так хочется указывать в параметрах элементарные типы, то используйте spl types. |
| Автор: ksnk 19.11.2008, 09:39 |
| sTa1kEr, Контроль входящих параметров функции и контроль типов переменных, все-таки разные вещи. |
| Автор: sTa1kEr 19.11.2008, 12:22 | ||||
Причем здесь контроль параметров? Этот механизм никак не контролирует сами параметры, только их типы. Я хотел лишь сказать, что ноги тут растут из строгой типизации (а точнее ее отсутствия). Если бы была строгая типизация, тогда, конечно же, была бы и полноценная возможность типизации параметров, а так приходится довольствоваться тем что есть (хотя и этого уже не мало).
В общем да, т.к. это расширение - "костыль строгой типизации в PHP", имхо, еще не имеет логического завершения. Но зато оно прекрасно иллюстрирует проблемы с типизацией в PHP и наглядно объясняет причину отсутствия типизации элементарных параметров. Документации на него действительно почти нету, только небольшие куски из конференций и примеры. Но там и нечего по сути документировать. |
| Автор: ksnk 19.11.2008, 17:01 | ||||
Угу... Мне вот тоже кажется самоочевидным, что для того, чтобы объявить переменную типа int в php вполне разумно написать
Любому человеку в достаточно трезвом уме такое само приходит в голову... Впрочем, понятно, что кардинальных изменений в 5-м никто делать никогда не соберется, пусть даже они и казались бы мне разумными Кстати, нет ли каких сведений о контроле типов в намечающемся 6-м php? |
| Автор: sTa1kEr 19.11.2008, 17:27 | ||||
Не факт, что через экстеншен вообще возможно добавить какую-либо новую языковую конструкцию. Скорее всего для этого нужно патчить сам PHP.
Кроме этого экстеншена? Вряд-ли. Я думаю, самое большое, на что можно надеяться, это что этот экстеншен в будущем перерастет в патч c соответствующими языковыми конструкциями. |