За последние 24 часа нас посетили 52530 программистов и 1797 роботов. Сейчас ищут 829 программистов ...

Помогите с ООП

Тема в разделе "PHP для новичков", создана пользователем alexander.pro, 6 ноя 2008.

  1. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    Пожалуйста скажите, что же я делаю не так. Пытаюсь разобраться в ООП уже полдня, уже голова пухнет.Может плюнуть на него и писать в процедурке....

    Код (Text):
    1.  
    2. <?php
    3.  
    4.   class Text
    5.   {
    6.    var $txt = Array();
    7.  
    8.    function Text ($c)
    9.    {
    10.     $a = 0;
    11.     $b = 1;
    12.     $d = $a + $b + $c;
    13.     $this->txt[] = $d;
    14.    }
    15.    }
    16.  
    17.    function summ()
    18.    {
    19.    return $this->txt;
    20.    }
    21.  
    22. ?>
    Код (Text):
    1.  
    2. <html>
    3.  
    4. <head>
    5.   <title>OOP</title>
    6. </head>
    7.  
    8. <body>
    9.  
    10. <?php
    11. require_once 'oop.php';
    12. $su =& new Text(10);
    13. $r = $su->summ();
    14. echo ($r);
    15. ?>
    16.  
    17. </body>
    18.  
    19. </html>
    Пожалуйста посоветуйте какую-нибудь книгу...
     
  2. Mete0

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

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
  3. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    alexander.pro
    PHP4 больше нет. В PHP5 ООП реализовано во многом по-другому.
     
  4. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    alexander.pro
    У вас summ находится вне класса, судя по скобкам.
     
  5. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    Скобку перенесите между функцией function summ() в конец
     
  6. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    Если можно отличие плз ....
     
  7. dAllonE

    dAllonE Guest

     
  8. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    Спасибо ... Разобрался с вашей помошью.
    По вашему мнению, каким из методов сейчас стоит писать...
     
  9. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Вот может сейчас меня закидают помидорами, но мне кажется, что это зависит от того, что ты делаешь. Если какую-нибудь маленькую программульку и пишешь её один ты, то как тебе удобнее - так и делай, можешь и процедурным. А если что-то серьёзное и особенно если пишешь не ты один, а есть ещё разработчики, то ООП удобнее...
     
  10. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    Безопасней ИМХО --- ООП
    Да и производитетельней это не ИМХО :lol:
     
  11. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    imho:
    1. Zend и PHP не одно и тоже.
    2. Различия между 4 и 5 не революционные (кстати, в чем глубина идеи называть теперь конструктор __construct а не именем класса ? )

    alexander.pro
    Изучайте принцип ООП и мышление по ООП, реализация вторична.
     
  12. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    Как я понял в 4 версии не было защищённых данных в классах а в 5 ой прототип взят с С++ классов.В 4 версии как сами разработчики называли заумный массив был а не ООП.
    Да и неявных ссылок внутри класса стало больше что и увеличило производительность.
     
  13. dAllonE

    dAllonE Guest

    obsrv, интерестно как изучать принцип ООП и мышление по ООП в PHP4 при:
    Отсутствии protected, private, abstract. и много другого.
    Я уже не говорю о дурацком принципе работы $new = MegaClass(); $new2 = $new;

    ИМХО в php4 ООП не было.
     
  14. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Процитирую фрагментик из книги:
    В версии PHP4 конструкторы имеют те же имена, то и сам класс. В версии PHP5 внесены изменения, направленные на унификацию исользования конструкторов.
    Золотые слова.
     
  15. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    Крутой МАССИВ :lol:
     
  16. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Ну если так говорят разрабы :).
    Может в 4 и не было private, public, protected (а разве не было?). Просто я пришел наверное сразу в 5ую)

    Если рассматривать пример в шапке темы, то он абсолютно нормален для ООП.
     
  17. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    Эта фишка уже из других языков типа С++ ...
     
  18. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    dAllonE
    При отсутствии будут все паблик, какие проблемы ? ;)

    доп: кстати, вид $new = MegaClass() - очень даже красив с точки зрения АБСТРАКЦИИ, но плох в унификации (как sobachnik писал выше).

    imho: PHP просто вырос из штанишек скриптового языка с сишной реализацией и хочет двигаться куда-то далее.
    Мне предпочтительнее реверансы в сторону Java.
     
  19. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    А мне кажется надо явно задавать область видимости методам и свойствам ИМХО понятнее
     
  20. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Greg1978
    Я согласен полностью, просто я против категоричности dAllonE.
    Начинать можно и с пабликов. В реальной жизни паблики (и тд) дают бонус в раскладывании 'добра' по полочкам, чтобы в крупных проектах не плодилась свалка.
     
  21. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    В PHP4 не было интерфейсов, разделения доступности переменных/методов, клонирования объектов.
    PS. Пока писал уже настрочили постов )
     
  22. dAllonE

    dAllonE Guest

    obsrv, знаешь Википедия, например, относит инкапсуляцию в ООП к одному из основных понятий. И я с ней (и с многими другими считающими так же). Полностью согласен.

    UPD: Плюс интерфейсы, клонирование, abstract, final, static(в явном виде) и т.д.
    Не было в php4 нормального ООП :) (ИМХО разумеется)
     
  23. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    Я вроде как слышал :oops: клонирование было однако именно клонирование а не создание новой ссылки на одно и то же пространство в оперативной памяти что и позволило повысить производительность и в этом.
     
  24. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    +1
     
  25. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Заклевали с четверкой - отступлюсь. Значит я приехал в PHP сразу в пятерку. :)

    dAllonE
    красивые слова (инкапсуляция) в ход пошли :).
    Ну ок:

    PHP:
    1.  
    2. class A {
    3.  var $b = '';
    4.  setB( $n ) { $this->b = $n; }
    5. }
    6.  
    7. class B {
    8.   private $b = '';
    9.  setB( $n ) { $this->b = $n; }
    10. }
    11.  
    Какая для вас, как для разработчика принципиальная разница? Только та, о которой я писал выше: не будет в дальнейшем свалки (+еще разные фичи но не критичные).

    Зато, отдавая код, вы обременены в любом случае созданием документации (а-ля javadoc).