За последние 24 часа нас посетили 34387 программистов и 1819 роботов. Сейчас ищут 870 программистов ...

Строгая типизация для объектов

Тема в разделе "Прочие вопросы по PHP", создана пользователем Michael, 3 дек 2009.

  1. Michael

    Michael Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    54
    Симпатии:
    0
    Можно ли в PHP реализовать строгую проверку типа для объектов? Т.е. как проще и удобнее всего проверить, что, скажем, в метод в качестве параметра был передан объект заданного типа (а не какого-либо другого) и можно ли это вообще сделать?

    OFF: давно не работал с PHP, после стройных C++/C# со строгой типизацией излишняя свобода в приведении типов в PHP настораживает 8)
     
  2. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    method(type Param)
     
  3. Michael

    Michael Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    54
    Симпатии:
    0
    Спасибо! Type Hinting в доках; нашел =)

    Кстати, получается, что указать method(MyClass[] $param) нельзя?
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    нельзя.
    Вообще такой хинтинг поддерживается только для array, класса или интерфейса

    Т.е. method(int $param) бессмысленнен
     
  5. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    он вообще не нужен в PHP... Если Michael настораживает типизация то пиши лучше на asp ))
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Костян
    Почему не нужен?
    Если я ожидаю, что мне дадут, например, массив, то я должен проверить переменную функцией is_array.
    Иначе скрипт полетит в самый неподходящий момент. =))

    Кстати, надо проверить что быстрее:

    Код (Text):
    1. method (class $var){
    2. $var->method2();
    3. return 1;
    4. }
    или
    Код (Text):
    1. method ($var){
    2. if ($var instanceof MyClass){
    3. $var->method2();
    4. return 1;
    5. }
    6. }
    Понятное дело, что примеры имеют немного разную функциональность. Вопрос в скорости.
     
  7. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Volt(220), если вам важны вопросы скорости базовых конструкций языка, вам туда же, куда и тем кому важна строгая типизация.
     
  8. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Volt(220)
    конечно же можно ставить где то, если уж очень очень сильно надо, но вот делать это с int это вообще маразм
     
  9. Diem

    Diem Активный пользователь

    С нами с:
    16 окт 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Харьков
    Маразм ?
    PHP:
    1. function sql_delete($id) {
    2.     $id = intval($id); // вот это маразм
    3.     ...
    4. }
    Но приходится, потому что по другому пока никак, хорошо что с классами сделали хоть.
     
  10. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А что, в С++ когда с TextBox текст получаете, не приводите его к нужному числовому типу и только тогда работаете с ним? Или он у вас с текстовой строки сам становится double, прям вот так, без всех преобразований?
     
  11. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Diem
    Это совсем другое, не надо путать цветы с мороженным. SQL запрос обычно является строкой, так что ваш пример вообще не в тему.
     
  12. Michael

    Michael Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    54
    Симпатии:
    0
    OFFTOPIC: Я так и знал, что начнется холивар))
     
  13. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    vasa_c
    Мне не важны эти вопросы, они мне интересны. =))
     
  14. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Что такое icpu.ru?
     
  15. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Вот если бы можно было написать:
    PHP:
    1.  
    2. function f(int x) { ... }
    3. f('123xx');
    4.  
    И пых сам приводил аргумент к инту, в этом был бы смысл.
     
  16. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    я блюю от типизации сишника
     
  17. sorteros

    sorteros Активный пользователь

    С нами с:
    28 авг 2009
    Сообщения:
    54
    Симпатии:
    0
    Mr.M.I.T., с чего вдруг?
     
  18. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    с говно костылей из-за неё
     
  19. sorteros

    sorteros Активный пользователь

    С нами с:
    28 авг 2009
    Сообщения:
    54
    Симпатии:
    0
    В смысле тебя вообще статическая типизация не устраивает? Зачем брался тогда?
     
  20. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    sorteros
    ты php хорошо знаешь? сравни схожие алгоритмы там и тут =)
     
  21. sorteros

    sorteros Активный пользователь

    С нами с:
    28 авг 2009
    Сообщения:
    54
    Симпатии:
    0
    Ну не мне тебе объяснять, что это языки совсем разного уровня. С++ - это тяжеленный монстр, который умеет всё и, конечно, он гораздо менее удобен и лёгок.
     
  22. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    sorteros
    двоичный код умеет больше
     
  23. sorteros

    sorteros Активный пользователь

    С нами с:
    28 авг 2009
    Сообщения:
    54
    Симпатии:
    0
    Не хочу спорить с тобой. Под каждые задачи подходят свои средства. Не думаю, что тебе придёт в голову программировать, скажем, микроконтроллеры на пхп или чём-нибудь подобном.
     
  24. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    тем не менее видно, какая зло эта типизация
     
  25. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Michael
    Шозатипизацияобъектов?
    Зачем вам PHP, если нужна типизация? Отсутствие типизации - это не баг а фича, ею пользоваться надо и писать код сотвествующий.
    В пыхе объкт это отдельный тип, если не заметил, а не универсальный тип для любой переменной.

    Upd'ed