![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Goganchic |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
Всем привет!
Долгое время я не программировал на PHP и вот недавно начал вспоминать. Столкнулся с такой ламерской ошибкой. Пишу простой пример:
И при запуске получаю ошибку:
И что-то я никак не пойму, из-за чего ошибка-то. Если убрать тип аргумента (string в конструкторе и функции execQuery) то вроде все работает, но это ведь как-то неправильно, ибо я не хочу чтобы мне передавали в эту функцию аргумент типа, отличного от строки. PHP Version 5.2.4. Подскажите пожалуйста что я делаю не так. Это сообщение отредактировал(а) Goganchic - 16.11.2008, 10:10 |
||||
|
|||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
для начала сделай конструкток - конструктором. у тебя же PHP 5, а ты пользуешься формой записи конструктора для 4. возможно, это как-то связано.
|
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
skyboy, уже сделал - не помогло
|
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
Проверка типов аргументов работает только для классов, а не для элементарных типов даных
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
а ниче и не поменялось
Расшифровка - это вам, батенька не С. Не выпендривайтесь Типы лучше проверять по старинке, вручную. А так как сделано это в php5-м, imho, нужно было только для самоудовлетворения авторов языка... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| Serkys |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1061 Регистрация: 19.4.2004 Репутация: 4 Всего: 22 |
||||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
Да ладно. Все очень даже логично. Проверка выполняется для типов, преодразование между котороми выполнить автоматически невозможно -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
solenko, imho, нелогична неполнота. Почему не сделана проверка на элементарные типы? Разве это сложнее, чем вставить проверку корректного наследования объектов?
Добавлено через 4 минуты и 23 секунды
Не понимаю смысла фразы... Можно поподробнее? "Объектный тип праметра" подразумевает, что в качестве параметра может быть передан объект, унаследованный от обозначенного. Вроде никакого дополнительного смысла я не знаю... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
Goganchic, тема помечена решенной - ты нашел решение? или по ошибке пометил решенной?
|
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
Нелогично было бы если б в языке с нечеткой динамической типизацией вдруг появилась автоматическая проверка типов ) Я хотел сказать, что стандартные типы могут быть преобразованы из одного в другой автоматически. Вроде как РНР дложен автоматически разруливать проблеммы с неправильным типом аргумента путем преобразования типа (ну эт я конечно забыл о array, function, object). С пользовательскими объектами же непонятно как поступить, по каким правилам пробразовывать. -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
А кто говорит об автоматической проверке типов? Нет желания проверять тип - не указывай. Есть желание - напиши int или string, никакой автоматики
Никакого противоречия, кроме нежелания авторов, я ненахожу. Наличие такой фичи никому не помешало бы. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
||||
|
||||
| sTa1kEr |
|
||||||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Вы это скажите авторам, которые SPL_Types пишут.
Потому что в PHP есть такое понятие, как "автоматическое приведение типов". И если бы они это сделали для элементарных типов, то было бы крайне тяжело потом объяснить "почему '5' - это не integer"
Не получится, т.к. противоречит философии PHP. Пришлось бы делать строгую типизацию для всех типов данных. Добавлено через 1 минуту и 32 секунды И, кстати, если уж так хочется указывать в параметрах элементарные типы, то используйте spl types. |
||||||
|
|||||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
sTa1kEr, Контроль входящих параметров функции и контроль типов переменных, все-таки разные вещи.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Причем здесь контроль параметров? Этот механизм никак не контролирует сами параметры, только их типы. Я хотел лишь сказать, что ноги тут растут из строгой типизации (а точнее ее отсутствия). Если бы была строгая типизация, тогда, конечно же, была бы и полноценная возможность типизации параметров, а так приходится довольствоваться тем что есть (хотя и этого уже не мало). В общем да, т.к. это расширение - "костыль строгой типизации в PHP", имхо, еще не имеет логического завершения. Но зато оно прекрасно иллюстрирует проблемы с типизацией в PHP и наглядно объясняет причину отсутствия типизации элементарных параметров. Документации на него действительно почти нету, только небольшие куски из конференций и примеры. Но там и нечего по сути документировать. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |