За последние 24 часа нас посетили 34263 программиста и 1314 роботов. Сейчас ищут 1008 программистов ...

Область применения ООП

Тема в разделе "Прочие вопросы по PHP", создана пользователем Freakmeister, 1 фев 2011.

  1. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Apple, речь идёт не о статических классах в полном смысле этого слова, а о классах, обладающих статическими свойствами. У меня это самые ходовые инструменты.
    Глобальны по праву рождения, это да. Если понимать в том контексте, в котором я это описал, то по удобству доступа им нет равных.

    PS: Я сторонник того стиля программирования, который оправдан в конкретной ситуации. Но глубоко уважаю программистов функционального стиля. Кто понял о чём, тот, наверняка, согласится со мной.
     
  2. Freakmeister

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

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Слушайте, а код функции внутри класса действительно выполняется каждый раз заново, при обащении к свойству объекта, который с этой функцией сопоставлен? Что-то это фигня какая-то, мне кажется... Неужели разработчики PHP не предусмотрели способа, при котором функция внутри класса определяла бы значение ключа всего раз - при первом обращении к ней?
     
  3. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    код функции внутри класса находится в методах. если их вызывать, то код действительно выполняется каждый раз заново. КО.
    с этого места поподробнее. если мы говорим про геттеры и сеттеры, то просто погуглите "геттеры и сеттеры в php"
    мне тоже так кажется
    функция внутри класса - это метод, будем называть вещи своими именами. я считаю, что это верно не знать в каком состоянии находится объект класса, если вы об этом не заботитесь. яркий пример. у меня есть объект класса, с которым я что-то делаю. выработав свою часть работы я пересылаю это объект в сериализированном виде вам на сервер, где работу с ним продолжаете вы. если контролем состояния объекта занимался бы php, то при сериализации необходимо было бы использовать макрер контроля состояния - который прозрачен и отлично подходит для правки руками. черевата такая конструкция новыми инжектами - класс-стэйт инжекты) звучит неплохо.
    что по делу - напишите костылик. все костылируют, это не стыдно =)
     
  4. sergeodr

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

    С нами с:
    15 фев 2011
    Сообщения:
    9
    Симпатии:
    0
    Вот так вот сторнников ОПП поставили в тупик :) Не кто не может привести толкового наглядного примера с ОПП... который бы явно демонстрировал превосходство ОПП кодинга над процедурно-функциональным :)
    В общем это серьезная задача на сообразительность ;) пошел соображать, соображу отпишусь )))))
     
  5. Jampire

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

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    Куда круче привести обратный, доказать, что там, где без ооп никак, лучше применять процедурный.
    На счет примера про ооп. По моему он дается в любой книжке про введение в ооп. Это пример с геометрическими фигурами.
     
  6. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Есть CMS система, которая разбита на модули.
    Каждый модуль представляет собой отдельный класс.

    У каждого модуля есть:
    - версия
    - заголовок
    - информация о модуле
    - функция для отображения
    - функция для доступа ко внутренним файлам
    - функция установки модуля
    - функция удаления модуля
    - административный интерфейс
    - и т.д...

    Однако, чтобы создать свой первый модуль, достаточно просто написать
    Код (Text):
    1. class controller_module extends base_controller {}
    и данный модуль будет выполнять все базовые возможности модуля.

    Почему?

    Да потому что все методы, общие для всех модулей, достаются данному модулю
    по наследству - нет необходимости каждый раз заниматься копи-пастой.

    Нужно чтобы наш новый модуль что-то делал по другому?
    Нет проблем - взяли, и изменили функцию внутри модуля.
    У всех остальных данная функция будет работать по старому.


    Как можно реализовать подобное с помощью чистых функций?
     
  7. sergeodr

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

    С нами с:
    15 фев 2011
    Сообщения:
    9
    Симпатии:
    0
    +1
    Функциями это не реализуемо, можно написать другую функциию, но это уже будет не то, когда к примеру в цыкле перебираешь данные и обращение должно идти к одному методу функции, при этом ожидаемые ответы функций должны быть разными тут уже не как без ОПП

    Разжую :)

    1)
    foreach( $array as $item )
    {
    $result = myfunc( $item );
    }

    2)
    foreach( $arrayObject as $itemObject )
    {
    $result = $itemObject->method();
    }

    вариант 1 результат всегда будет получаться однородным. ( хотя как альтернатива сама myfunc может быть модифицирована с добавлением условий зависимых от полученных данных )

    вариант 2 метод обьекта всегда один но результаты которые мы будем получать могут быть общитаны соверщенно по разному ( данные для общета уже не передаються они есть свойствами объекта )

    Вывод: получаем некую абстракцию "пространства имен" для методов (функций) в процедурном стиле это не реализуемо.
     
  8. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    еще во втором варианте - объекты могут принадлежать к разным классам, соответственно method() у них может быть реализован по-разному. В случае с функциями - пришлось бы вызывать разные функции)
     
  9. sergeodr

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

    С нами с:
    15 фев 2011
    Сообщения:
    9
    Симпатии:
    0
    Ну собственно это я и пытался показать, а будет это другой класс или переопределенный родительский это уже ньюансы.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    инкапсуляция!
     
  11. sergeodr

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

    С нами с:
    15 фев 2011
    Сообщения:
    9
    Симпатии:
    0
    Массив тоже инкапсуляция ))))
     
  12. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    sergeodr

    По моему вы не совсем понимаете смысл этого слова)))
    Какая в массиве инкапсуляция?
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    sergeodr
    э?..
    Борис, ты не прав! (с)

    Массив это данные! Доброе утро! =)
     
  14. sergeodr

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

    С нами с:
    15 фев 2011
    Сообщения:
    9
    Симпатии:
    0
    А может вы не правильно его понимаете ;)
    Давайте отбросим пехепе, и подумаем что такое инкапсуляция...
    Возьму я обычную баскетбольную биту которая висит на стенке как украшение и ничего не делает (у нее нет применения, методов), но тем не менее она инкапсулирует(содержит) в себе такие понятия как вес, ширина, форма, цвет, длинна и т.д. Все это можно описать массивом? Однозначно да, следовательно массив это инкапсулятор какихто свойств или значений ;) Доказал что в массиве есть инкапсуляция? Теперь докажите обратное.
     
  15. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Инкапсуляция - это управляемое ограничение доступом + возможность "расширяться внутрь". Все мои методы - это мои методы. Захочу внутренний класс - больше его никто не получит. Захочу закрытый метод - будет мой метод. Вот есть у объекта вес, ширина, форма, цвет, длина и т.д.. Но тебе, лысый, я телефон не скажу!.. (с)
    А в случае с массивом любой желающий придёт и сделает с вашим массивом всё, что захочет.
     
  16. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    что за внутренний класс?
     
  17. Volt(220)

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

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Массив это не инкапсуляция - это абстракция.
    А вот классы, объекты - могут инкапсулировать некую информацию.
    В принципе, если работать с массивами через специальные функции и в соответствии с некоторыми правилами, то можно организовать поддержку инкапсуляции на массивах.
     
  18. Volt(220)

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

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    А вот это мы выпытаем var_dump'ом.
     
  19. sergeodr

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

    С нами с:
    15 фев 2011
    Сообщения:
    9
    Симпатии:
    0
    О Инкапсуляции в php заговорили за долго до того как там появились private и protected а единственным показателем этих свойств был подчерк в начале методов. А если обьект использувался как массив для хранения данных без единого метода то это уже не обьект и он ничего не инкапсулирует :) я понимаю википедия это хорошо, но реально инкапсуляция это абстракция, а все остальное побочные эфекты и не более ;)
     
  20. sergeodr

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

    С нами с:
    15 фев 2011
    Сообщения:
    9
    Симпатии:
    0
    Volt(220) в общем то понял что я хотел сказать :)
     
  21. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    PHP:
    1. <?php
    2.     //в php не поддерживаются! приводится как пример!
    3.    
    4.     class Outer {
    5.         class Inner {
    6.             $a;
    7.             function __construct()
    8.             {   $a=7;   }
    9.         }
    10.         $inner;
    11.         function __construct()
    12.         {   $inner = new Inner();   }
    13.     }
    14.     $v_Outer = new Outer(); //можно
    15.     $v_Inner = new Inner(); //нельзя
    16. ?>
     
  22. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Я с этой проблемой пришёл на форум) И, кстати, Padaboo успешно с этой задачей справился
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    =) иди спать!
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    доказывать должен изрекатель тезиса, а не слушатели =)
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    titch
    есть еще мегакрутая функция которая дампит ВАЩЕ ВСЕ на момент вызова...