ООП для начинающих PHP. Конструкторы и деструкторы. Магические методы.

Поделиться
HTML-код
  • Опубликовано: 8 сен 2024
  • Курс ООП для начинающих в PHP. В этом уроке мы рассмотрели конструкторы и деструкторы.
    ========================================================
    ПОДПИШИСЬ на канал "Web Developer Blog" - goo.gl/Ai4OGa
    И не пропускай новые видео!!!
    ========================================================
    ПЛЕЙ-ЛИСТЫ МОЕГО КАНАЛА:
    JavaScript практика - goo.gl/rxsyeX
    Основы JavaScript - goo.gl/Cw7Vqv
    Уроки Bootstrap 4 - goo.gl/65gmmS
    Уроки Framework для верстки Foundation 6 - goo.gl/Yi2jfc
    Рубрика "Основы за 10 минут" - goo.gl/QIvpDD
    Верстка сайта на Foundation 6 - goo.gl/gVS45o
    Основы препроцессора SASS - goo.gl/f4BDww
    Уроки по Sublime text 3 - goo.gl/SjiKM2
    Видео про заработок на RUclips - goo.gl/VxdirI
    Создаем интернет магазин на PrestaShop - goo.gl/jop7M4
    Уроки jQuery - goo.gl/tjAs41
    ========================================================
    ПОДПИШИСЬ на Группу Вконтакте "Web Developer Blog" - goo.gl/6mO5GL

Комментарии • 115

  • @TimStellar
    @TimStellar 2 года назад +2

    Забавно смотреть, как раньше было по 50 просмотров на видео, а сейчас все 50к. Спасибо! Очень хорошо объясняешь)

    • @lmaq8352
      @lmaq8352 Год назад

      сколько лет прошло как бы

  • @alekokhvadagiani4288
    @alekokhvadagiani4288 6 лет назад +16

    Как то непонятно мне для чего нужен деструктор, как его надо применить в практике, почему надо уничтожать ? Происните мне пожалуста

    • @sergeipirogov5396
      @sergeipirogov5396 5 лет назад +13

      Как я понял на данный момент,желательно уничтожать отработанные объекты,которые в дальнейшем коде будут не нужны,чтобы они не занимали лишнюю память и не нагружали своей инициализацией процессор.Знатоки,это так? :-)

    • @xoron9496
      @xoron9496 4 года назад

      @@sergeipirogov5396 Да это так!

  • @user-zp8wk9yb8l
    @user-zp8wk9yb8l 7 лет назад +1

    Лайк!!! только сечас "толково понял" про эти методы :)

  • @user-bx5sx6rh1s
    @user-bx5sx6rh1s 3 года назад

    Спасибо за материал!

  • @user-yk3if2ku4e
    @user-yk3if2ku4e 7 лет назад

    Супер. Мне нравится. Продолжай

  • @user-np9be6zv8v
    @user-np9be6zv8v 7 лет назад +6

    Хорошее видео, только забыли сказать о значениях по-умолчанию для конструктора, а так все на высоте))) Спасибо.

  • @kottanya
    @kottanya 6 лет назад +1

    Хороший урок.Спасибо))

  • @ivanpunch
    @ivanpunch 5 лет назад +1

    __construct в данном примере был применен по принципу function в php в строго заданном порядке переменных, не увидел в нем смысла.
    Я вот его например использую для высчитывания внутри него переменных для дальнейшего их использования в методах ниже. Не знаю насколько это не правильно, но это работает и приносит желаемый результат.

  • @muslimbrother4827
    @muslimbrother4827 7 лет назад

    Спасибо вам вы где проподали вы нам нужны без вас как-то трудно )

    • @SuprunAlexey
      @SuprunAlexey  7 лет назад

      Не было ни времени, ни желания снимать.

    • @muslimbrother4827
      @muslimbrother4827 7 лет назад

      Web Developer Blog потерпите еще чу-чуть новый Рим не сразу строился же)

    • @muslimbrother4827
      @muslimbrother4827 7 лет назад

      Не торопитес вы так новый Рим не сразу строился! )

  • @user-uf2rm8is3r
    @user-uf2rm8is3r 6 лет назад +2

    С начала на этом канале научусь ООП а после на канале Дмитрия Лаврика закреплю практикой. Я так с HTML,CSS,JS так делал ,сперва легенький салатик(теория+немножко практики) а потом жирное мясо(много практики). Хотя курс по Js на WDB жирный.

  • @DogAndKiller
    @DogAndKiller 4 года назад

    Спасибо, хоть тут понял, что это за штука такая.

  • @arslonboyisorov7751
    @arslonboyisorov7751 3 года назад

    Спасибо брат

  • @cityedit
    @cityedit 6 лет назад

    Класс

  • @smile_uz
    @smile_uz 2 года назад

    👍👍👍

  • @MrPyCCkuu1
    @MrPyCCkuu1 7 лет назад +9

    Стоит упомянуть, что вышеупомянутые методы __construct и __destruct - это так называемые "магические методы", которые есть у каждого класса в PHP. Есть еще целый ряд других "магических методов", такие как: __get, __set, __isset, __unset, __call и другие. Имена этих методов зарезервированы в PHP, а потому не стоит называть методы своих классов этими именами.

    • @SuprunAlexey
      @SuprunAlexey  7 лет назад +3

      Стоит так же упомянуть что целый ряд других магических методов будут рассмотрены каждый по отдельности далее в отдельных видео.

    • @MrPyCCkuu1
      @MrPyCCkuu1 7 лет назад

      Web Developer Blog понял ;)

    • @sergeipirogov5396
      @sergeipirogov5396 5 лет назад +1

      Я думал это называется встроенные функции php ? А вы их называете магическими методами? :-) Или это уже разные вещи?

    • @user-xs8gi2oy4g
      @user-xs8gi2oy4g 7 месяцев назад

      ​​@@sergeipirogov5396функция это функция, а это метод, т.е. всегда является объектом класса.

  • @user-rw7uh2vo9z
    @user-rw7uh2vo9z 5 лет назад +5

    5-46 ПОнятно , что не понятно для чего конструктор то ?

    • @RenatGrishin
      @RenatGrishin 5 лет назад +19

      Для удобства. Раньше ты добавлял значения классу так:
      $admin = new User();
      $admin->Name = "Renat";
      $admin->Fname = "Grishin";
      С конструктором ты задаешь значения так:
      $admin = new User("Renat", "Grishin");

  • @romanenkoonline
    @romanenkoonline 6 лет назад +2

    Плохо доходит до меня. Что посоветуете почитать, чтобы было понятно для чего все это нужно? Я с PHP работаю с 2007 года, но только процедурным методом и весьма поверхностно. Как применить то, о чем вы говорите, я не понимаю и в чем же такое преимущество ООП в сравнении с ПП.

    • @VitaliyHAN
      @VitaliyHAN 6 лет назад +1

      Аналогично и я. Но как только приходится делать что-то очень крупное, процедурный метод, как бы четко все не было упорядочено по файлам, папкам, все равно возникает мешанина. Если делать что-то не большое, типа простеньких лендосов или небольших админок, в которых не надо что либо модернизировать в будущем, то процедурный подход будет и проще и быстрее. Если делать что-то расширяемое и большое - упираешься в сложность кода и в сложность доработки новых функций. ООП решает эту проблему и позволяет писать приложения, которые легче поддерживать и модернизировать. Ну, и к тому же все известные CMS, фреймворки написаны на ООП, поэтому даже их применение требует знаний в ООП. Как-то так.

  • @vladshcherbachenia9803
    @vladshcherbachenia9803 7 лет назад +2

    В PHP7.1 все норм!

  • @anflameone1580
    @anflameone1580 4 года назад

    Немного не понятно про свойства внутри конструктора. То есть можно использовать свойства без предопределения?

  • @sergweb1998
    @sergweb1998 7 лет назад +3

    Здравствуйте. Подскажите, зачем нужны фигурные скобки в функции getInfo? Я попробовал без них - вывод получился ( return "$this->name"."$this->password". "$this->email"."$this->city"; - без фигурных скобок). В каких случаях они используются. Спасибо за уроки.

    • @devasamyoswami1225
      @devasamyoswami1225 7 лет назад +10

      В php фигурные скобки вокруг переменных отделяют их от остального текста когда используются двойные кавычки, может быть ситуация когда есть переменная $name = "Джон", чтобы её вывести в тексте используем echo "{$name}у 12 лет". В браузере выведется: Джону 12 лет. Если бы мы не отделили переменную кавычками echo"$nameу 12 лет", то получили бы ошибку, т.к. переменной $nameу нет.

    • @MrProAuto
      @MrProAuto 6 лет назад

      А вот так что не получится echo $name"у 12лет" ;

    • @MrProAuto
      @MrProAuto 6 лет назад +1

      Без скобок не обойтись когда нужно вывести одну ячейку массива echo {$myrow["name"] } "у 12лет." ;

    • @sergeipirogov5396
      @sergeipirogov5396 5 лет назад

      Без кавычек и точек тоже работает :-) Вот так:
      public function test(){
      echo "Меня зовут $this->name $this->surname,
      Я из города $this->city,
      Мой емаил адрес: $this->email ";
      }

  • @questionsanswer6293
    @questionsanswer6293 7 лет назад +4

    Очень мало сказано про практическую полезность этих конструкторов) Да ип честно говоря, я не понял можно ли впринципи обойтись без конструктора, или это очень важно и критично.

    • @SuprunAlexey
      @SuprunAlexey  7 лет назад +1

      Если приложение требует использование конструктора, то используйте, нет так нет. Но на практике попробуйте порешать задачи на ооп и поймете как и где применяется конструктор.

    • @verge_programming
      @verge_programming 7 лет назад +2

      Скажу кратко. Если когда-нибудь ты задумаешься о написании серьезного и крупного приложения(не дай бог фреймворка или библиотеки), то возведешь храм в честь ООП, ибо после 100 000 строк кода, которые могли бы потратить у тебя кучу времени и сил, ты использовал лишь 10 000, просто распихав все по классам и затем лишь обращался к ним для дальнейшей работы.
      Я недавно заглянул в библиотеку jQuery и башка моя закипела. Куча строчек непонятных классов, конструкторов и замыканий, неизвестных мне функций, но при этом этот беспорядок настолько элегантно работает, что начинаешь и вправду осознавать, что "Хороший программист - это ленивый программист". Не было бы лентяев, кто бы сделал эту библиотек, чтобы сомкнуть JS до минимума и сэкономить время? Боги есть и они среди нас))
      Я изначально обошел ООП мимо, сейчас жалею, что не вникнул раньше. Все придет с приходом контроля версий и больших проектов, поверь)

    • @questionsanswer6293
      @questionsanswer6293 7 лет назад

      FeeDdieFeeD, я чет не поиму что вы хотели мне донести, про практическую полезность ооп?? Дак это я итак знаю, а вот про конструкторы вы ничего толком не сообщили))

    • @user-pk2jz3qf8u
      @user-pk2jz3qf8u 4 года назад +1

      Скажу по-секрету - избавляйтесь от jQuery, если желаете продвигаться в поисковиках. Да и вообще для пользователей удобнее, когда всё быстро работает. Учитесь работать с чистым js!
      А по поводу ООП - тут вопрос спорный. Я несколько движков сделал без него, с установкой компонентов. И никаких 100000 строк не было. Всё делается гораздо проще и работает быстро и без ошибок. Пару проектов ООП даже приходилось на функциональное программирование переводить. Оно реально работает медленнее и занимает больше места. Даже отладить невозможно самые простые части кода. В функциональном программировании самое главное, чтобы каждая часть была разделена на файлы, а каждый готовый объект в папке. Много таких папок можно в одну папку объединить и всё. Зато исправить одну строчку уже точно знаешь где. А вот в ООП придётся листать вниз до бесконечности, пока не найдешь то, что нужно. Как некоторые говорят: весь мусор в одном месте))) поэтому пока не разложишь по полочкам - ничего не найдешь, либо найдешь через несколько минут, часов и т.д. А это уже пустая трата времени!

    • @user-qg5uh6vf1v
      @user-qg5uh6vf1v 2 года назад +2

      @@user-pk2jz3qf8u Тут видео про php, а не js.

  • @johndeff
    @johndeff 7 лет назад +2

    Два раза пересмотрел видео, но так и не понял, для чего именно нужны эти магические методы. Как вы сказали, они каким-то образом избавляют программиста от тысячи строк дубликаций кода, но как именно, как вообще это понимать?🤔 Ну, а то, что сначала выполнился метод __construct() потом выполнился __destruct() это как бы очевидно, ведь они идут друг за другом и не иначе. Урок показал что есть, как я узнал из комментария, магические методы класса, но не раскрыл ничего из понимания этих самих методов.. Пошел я гуглить...

    • @alextopsite
      @alextopsite 7 лет назад +4

      в конструкторе можно открывать соединение с базой данных, а в деструкторе закрывать.

    • @user-it3ul5yg6s
      @user-it3ul5yg6s 5 лет назад +1

      Присоединяюсь к замечанию... для чего их использование не разъяснено?

    • @user-xs8gi2oy4g
      @user-xs8gi2oy4g 7 месяцев назад

      Я параметры бд передаю в конструкторе, создаешь класс типа mysql и потом все функции использующие бд пишу ниже.

  • @llollwhat
    @llollwhat 3 года назад

    Бля я въехал вроде. Спасибо мужик!

  • @zuhradvumarova5206
    @zuhradvumarova5206 Год назад

    Ребят подскажите как закомментировать код, я всегда вручную делала

  • @feruzn8601
    @feruzn8601 7 лет назад +1

    Спасибо за видео!
    А по какой книге лучше изучать ООП в PHP?

    • @SuprunAlexey
      @SuprunAlexey  7 лет назад +5

      Почти все книги которые я встречал переписывают документацию в PHP. Если хотите углубится в ООП то можете попробовать книги по C++ или Java, там все более детально описывается.

  • @user-xr3kp4by4r
    @user-xr3kp4by4r 5 лет назад +4

    Ну если работает как функция, если знаешь как работают функции и для чего они нужны, то освоить это проще просто простого. Вот и весь секрет

  • @user-ex3sj3mj8r
    @user-ex3sj3mj8r 3 года назад

    Как ты так кастомизировал Php storm? Есть отдельное видео?

  • @the2x548
    @the2x548 7 лет назад +2

    Зачем создавать конструтор, если можно ограничиться только созданием переменных? Не понял из этого урока пользы.

    • @hehmda1745
      @hehmda1745 7 лет назад

      php.net/manual/ru/language.oop5.decon.php

    • @PIVKOooo
      @PIVKOooo 6 лет назад

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

    • @user-it3ul5yg6s
      @user-it3ul5yg6s 5 лет назад +1

      @@PIVKOooo Ну так в уроке об этом не сказано! Это уроки для новичков, которые хотят освоить материал, а получают только частный случай, при том самый простой, не описывающий сути вообще... В этом основная проблема и большинство комментов...

  • @Sergey_Klimov
    @Sergey_Klimov Год назад

    Ну и не видит нифига переменные переменные в классе, к которым обращаешься через $this->$name. Пишет, что не найдена переменная.
    Уже и private и public пробовал их делать.

  • @glimmer5103
    @glimmer5103 2 года назад +1

    5:43 код такой же как и и в видео но не чего не выводится на страницу сайта

    • @ZK-mu4hq
      @ZK-mu4hq 2 года назад

      Тоже, php 8.1

  • @user-qr6zb7eb5y
    @user-qr6zb7eb5y 7 лет назад +1

    НЕ понял зачем здесь нужен деструктор. В языке C++ он нужен только тогда, когда надо подчистить указатели объявленные с помощью оператора new. Но в PHP указателей ведь нет, что он здесь чистит?

    • @Grishin33ru
      @Grishin33ru 7 лет назад +1

      Конструктор вызывается всегда при создании объекта, а деструктор также всегда, но при уничтожении объекта, но мы можем переопределять этот метод, добавляя в него функционал, например открывать и закрывать соединение с БД в этих методах, как в комментариях ниже подметили.

  • @arbitr9305
    @arbitr9305 7 лет назад +1

    немного не понял, при удалении объекта, он должен удалиться, да, логично, но потом я сделал var_dump объекта и ОН СУЩЕСТВУЕТ, со всеми свойствами, может я не правильно понял, но почему так?

    • @SuprunAlexey
      @SuprunAlexey  7 лет назад

      var_dump был сделан после всех выполненных действий деструктора?

    • @arbitr9305
      @arbitr9305 7 лет назад

      после конечно же

    • @andreyzaytsev8830
      @andreyzaytsev8830 7 лет назад

      Объект удалился, но после функции var_dump, т.к деструктор выполняется последним в коде. Поэтому массив с данными вывелся на экран. Попробуй использовать функцию unset объекта перед var_dump, который также вызовет деструктор, но уже непосредственно перед выполнением var_dump.

    • @PIVKOooo
      @PIVKOooo 6 лет назад

      удали объект функцией unset или присвой ему значение null.

  • @user-uf5sv1wi1p
    @user-uf5sv1wi1p 4 года назад +1

    Карчое по диструктору хочу другое видео

  • @xoxot_shamana
    @xoxot_shamana Год назад

    Меня одного бесит, когда вижу что люди выделяют слова не двойным кликом, а протягиванием курсора?

  • @user-on7ie1mh8n
    @user-on7ie1mh8n 7 лет назад

    классно, а cms будет?)

  • @vasylshyshola5434
    @vasylshyshola5434 5 лет назад

    Спасибо за отличные уроки!!! Есть маленький вопрос. если класы большые и замороченные, или храняться в других файлах, есть простой саособ промониторить все его свойства которые там есть и которые я надобавлял в объэкты?

    • @SuprunAlexey
      @SuprunAlexey  5 лет назад

      Это какими замороченными их нужно сделать?

    • @vasylshyshola5434
      @vasylshyshola5434 5 лет назад

      @@SuprunAlexey я начинающий.. мало что смыслю.. ну а если чужой код и я не знаю какие он свойства добавил.. можно как то проверить что уже есть в объэкте или просто скролиш и просматриваеш что туда добавляли?

  • @makarovdenis89
    @makarovdenis89 7 лет назад

    *ツ Подписываюсь и ставлю лайк;) Клевое видео :) буду счастлива видеть Вас на своем канале :)*

    • @SuprunAlexey
      @SuprunAlexey  7 лет назад

      ага, спамер, никто не подписывайтесь на него)

  • @LauncherThe
    @LauncherThe 6 лет назад +4

    Если честно такое чувство что я на марафоне и не могу догнать
    Слишком быстро ты все рассказываешь за тобой не успеть постоянно приходится видео на паузу ставить!

    • @SuprunAlexey
      @SuprunAlexey  6 лет назад +1

      +Максим Грищенко ок, приму к сведению

    • @proodfirst2330
      @proodfirst2330 6 лет назад +9

      нормальная скорость.
      P.s. это не ты быстро читаешь, а он медленно слушает.
      Pss твои уроки самые быстроусваемые. Есть масса ютюб каналов с обучающими роликами, подкастами, но твой самый лучший!
      лайк и респект!

    • @sasichkamega
      @sasichkamega 6 лет назад +2

      Ну так поставь на паузу, хуле

    • @1stabatvoix
      @1stabatvoix 5 лет назад

      Я вообще на x2 скорости смотрю - еще тот марафон =)))

    • @user-rw7uh2vo9z
      @user-rw7uh2vo9z 5 лет назад

      видео не на паузу надо ставить , а уменьшить скорость воспроизведения.

  • @learnjavascript1033
    @learnjavascript1033 7 лет назад

    Не понятно одно. Какой смысл вводить то что в конструкторе , нельзя просто переменные вставить в гет инфо?

    • @verge_programming
      @verge_programming 7 лет назад +1

      Ты не сможешь задать параметры при объявлении экземпляра. Это займет, как минимум, на одну строку больше пространства в коде. Для калькулятора в уроке - это не страшно, но для программы может оказаться критично. Поэтому лучше разделять понятия конструкторы, методы и свойства, и применять все это с умом, а не абы как. Советую почитать книгу "php. Правильный путь", где подробно говорится о всех нюансах правильного написания красивого и понятного кода.

  • @lllYMHA9I_KAPOBA
    @lllYMHA9I_KAPOBA 4 года назад

    не очевидно уничтожение объекта, вывелась надпись, а что объект уничтожен остается верить на слово

    • @user-xs8gi2oy4g
      @user-xs8gi2oy4g 7 месяцев назад

      Var_damp('объект') результат NULL

  • @rahmandikaev5922
    @rahmandikaev5922 5 лет назад

    почему нужен этот ооп он вообще оперативку много жреть лучше использовать ассоциативные массив куки и т.д

  • @romanchubich2013
    @romanchubich2013 3 года назад

    echo $name, $password, $email, $city

  • @user-uf5sv1wi1p
    @user-uf5sv1wi1p 4 года назад

    Вот на самом деле про диструктор тут не понятно что он делает и примера толкового нету
    а прошлые уроки были хорошие так что тут недочет какой то

  • @rahmandikaev5922
    @rahmandikaev5922 5 лет назад

    когда хотел эксперементировать
    $user->__construct();

  • @user-rz6pt4ug1n
    @user-rz6pt4ug1n 5 лет назад +2

    Урок просто срань...
    Автор не удосужился объяснить, что эти методы( __construct() и __destruct() ) есть по умолчанию в каждом классе. Просто если программист их не описывает, то они не реализуются. И вообще я заметил, что у данного автора много ошибок в коде, часто чего-то не договаривает, вообще складывается впечатление, что автор данного ютуб канала не профессионал. Кстати, не он один. Часто смотришь очередного "мастера" и диву даешься - ошибка за ошибкой...
    Метод __destruct() можно вообще не описывать, т.к. PHP и так закроет выполнение программы и освободит оперативную память. Метод __destruct() используют, чтобы наглядно показать, что программа выполнилась и что это ее завершение. Например, вывести function __destruct() {echo 'Завершение программы';}
    Метод function __destruct() записывается в конце тела класса.
    А вот метод function __construct() используют, чтобы можно было передавать значения свойства класса сразу в объект. Напр.: $obj = new Class('login','password');
    Таким образом в объект $obj с помощью описанного метода __construct() в классе Class будет передано 2 параметра это login и password. Метод __construct() автор описал более или менее нормально.

  • @reptiloid7438
    @reptiloid7438 5 лет назад

    Хотите лучше это понять - учите сначала java:)))

  • @botvinnic614
    @botvinnic614 Год назад

    такой голос занудный, хотя бы музыку включил хоть

  • @serega1009
    @serega1009 6 лет назад +1

    Видео у тебя какие-то растянутые про ОПП, можно всё быстро за час рассказать, а не мусолить кучами выпусков.

    • @rusdemashov5056
      @rusdemashov5056 6 лет назад +1

      Да и можно вобще за 10 минут)))