ООП для начинающих PHP. Конструкторы и деструкторы. Магические методы.
Вставка
- Опубліковано 18 вер 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
Видео про заработок на UA-cam - goo.gl/VxdirI
Создаем интернет магазин на PrestaShop - goo.gl/jop7M4
Уроки jQuery - goo.gl/tjAs41
========================================================
ПОДПИШИСЬ на Группу Вконтакте "Web Developer Blog" - goo.gl/6mO5GL
Забавно смотреть, как раньше было по 50 просмотров на видео, а сейчас все 50к. Спасибо! Очень хорошо объясняешь)
сколько лет прошло как бы
Как то непонятно мне для чего нужен деструктор, как его надо применить в практике, почему надо уничтожать ? Происните мне пожалуста
Как я понял на данный момент,желательно уничтожать отработанные объекты,которые в дальнейшем коде будут не нужны,чтобы они не занимали лишнюю память и не нагружали своей инициализацией процессор.Знатоки,это так? :-)
@@sergeipirogov5396 Да это так!
__construct в данном примере был применен по принципу function в php в строго заданном порядке переменных, не увидел в нем смысла.
Я вот его например использую для высчитывания внутри него переменных для дальнейшего их использования в методах ниже. Не знаю насколько это не правильно, но это работает и приносит желаемый результат.
Хорошее видео, только забыли сказать о значениях по-умолчанию для конструктора, а так все на высоте))) Спасибо.
Спасибо
Лайк!!! только сечас "толково понял" про эти методы :)
Спасибо!
С начала на этом канале научусь ООП а после на канале Дмитрия Лаврика закреплю практикой. Я так с HTML,CSS,JS так делал ,сперва легенький салатик(теория+немножко практики) а потом жирное мясо(много практики). Хотя курс по Js на WDB жирный.
Ну норм
Хороший урок.Спасибо))
Спасибо вам вы где проподали вы нам нужны без вас как-то трудно )
Не было ни времени, ни желания снимать.
Web Developer Blog потерпите еще чу-чуть новый Рим не сразу строился же)
Не торопитес вы так новый Рим не сразу строился! )
Спасибо за материал!
Супер. Мне нравится. Продолжай
Спасибо!
👍👍👍
Спасибо, хоть тут понял, что это за штука такая.
Класс
Стоит упомянуть, что вышеупомянутые методы __construct и __destruct - это так называемые "магические методы", которые есть у каждого класса в PHP. Есть еще целый ряд других "магических методов", такие как: __get, __set, __isset, __unset, __call и другие. Имена этих методов зарезервированы в PHP, а потому не стоит называть методы своих классов этими именами.
Стоит так же упомянуть что целый ряд других магических методов будут рассмотрены каждый по отдельности далее в отдельных видео.
Web Developer Blog понял ;)
Я думал это называется встроенные функции php ? А вы их называете магическими методами? :-) Или это уже разные вещи?
@@sergeipirogov5396функция это функция, а это метод, т.е. всегда является объектом класса.
Спасибо брат
Плохо доходит до меня. Что посоветуете почитать, чтобы было понятно для чего все это нужно? Я с PHP работаю с 2007 года, но только процедурным методом и весьма поверхностно. Как применить то, о чем вы говорите, я не понимаю и в чем же такое преимущество ООП в сравнении с ПП.
Аналогично и я. Но как только приходится делать что-то очень крупное, процедурный метод, как бы четко все не было упорядочено по файлам, папкам, все равно возникает мешанина. Если делать что-то не большое, типа простеньких лендосов или небольших админок, в которых не надо что либо модернизировать в будущем, то процедурный подход будет и проще и быстрее. Если делать что-то расширяемое и большое - упираешься в сложность кода и в сложность доработки новых функций. ООП решает эту проблему и позволяет писать приложения, которые легче поддерживать и модернизировать. Ну, и к тому же все известные CMS, фреймворки написаны на ООП, поэтому даже их применение требует знаний в ООП. Как-то так.
Здравствуйте. Подскажите, зачем нужны фигурные скобки в функции getInfo? Я попробовал без них - вывод получился ( return "$this->name"."$this->password". "$this->email"."$this->city"; - без фигурных скобок). В каких случаях они используются. Спасибо за уроки.
В php фигурные скобки вокруг переменных отделяют их от остального текста когда используются двойные кавычки, может быть ситуация когда есть переменная $name = "Джон", чтобы её вывести в тексте используем echo "{$name}у 12 лет". В браузере выведется: Джону 12 лет. Если бы мы не отделили переменную кавычками echo"$nameу 12 лет", то получили бы ошибку, т.к. переменной $nameу нет.
А вот так что не получится echo $name"у 12лет" ;
Без скобок не обойтись когда нужно вывести одну ячейку массива echo {$myrow["name"] } "у 12лет." ;
Без кавычек и точек тоже работает :-) Вот так:
public function test(){
echo "Меня зовут $this->name $this->surname,
Я из города $this->city,
Мой емаил адрес: $this->email ";
}
Бля я въехал вроде. Спасибо мужик!
5-46 ПОнятно , что не понятно для чего конструктор то ?
Для удобства. Раньше ты добавлял значения классу так:
$admin = new User();
$admin->Name = "Renat";
$admin->Fname = "Grishin";
С конструктором ты задаешь значения так:
$admin = new User("Renat", "Grishin");
Два раза пересмотрел видео, но так и не понял, для чего именно нужны эти магические методы. Как вы сказали, они каким-то образом избавляют программиста от тысячи строк дубликаций кода, но как именно, как вообще это понимать?🤔 Ну, а то, что сначала выполнился метод __construct() потом выполнился __destruct() это как бы очевидно, ведь они идут друг за другом и не иначе. Урок показал что есть, как я узнал из комментария, магические методы класса, но не раскрыл ничего из понимания этих самих методов.. Пошел я гуглить...
в конструкторе можно открывать соединение с базой данных, а в деструкторе закрывать.
Присоединяюсь к замечанию... для чего их использование не разъяснено?
Я параметры бд передаю в конструкторе, создаешь класс типа mysql и потом все функции использующие бд пишу ниже.
В PHP7.1 все норм!
Отлично
Очень мало сказано про практическую полезность этих конструкторов) Да ип честно говоря, я не понял можно ли впринципи обойтись без конструктора, или это очень важно и критично.
Если приложение требует использование конструктора, то используйте, нет так нет. Но на практике попробуйте порешать задачи на ооп и поймете как и где применяется конструктор.
Скажу кратко. Если когда-нибудь ты задумаешься о написании серьезного и крупного приложения(не дай бог фреймворка или библиотеки), то возведешь храм в честь ООП, ибо после 100 000 строк кода, которые могли бы потратить у тебя кучу времени и сил, ты использовал лишь 10 000, просто распихав все по классам и затем лишь обращался к ним для дальнейшей работы.
Я недавно заглянул в библиотеку jQuery и башка моя закипела. Куча строчек непонятных классов, конструкторов и замыканий, неизвестных мне функций, но при этом этот беспорядок настолько элегантно работает, что начинаешь и вправду осознавать, что "Хороший программист - это ленивый программист". Не было бы лентяев, кто бы сделал эту библиотек, чтобы сомкнуть JS до минимума и сэкономить время? Боги есть и они среди нас))
Я изначально обошел ООП мимо, сейчас жалею, что не вникнул раньше. Все придет с приходом контроля версий и больших проектов, поверь)
FeeDdieFeeD, я чет не поиму что вы хотели мне донести, про практическую полезность ооп?? Дак это я итак знаю, а вот про конструкторы вы ничего толком не сообщили))
Скажу по-секрету - избавляйтесь от jQuery, если желаете продвигаться в поисковиках. Да и вообще для пользователей удобнее, когда всё быстро работает. Учитесь работать с чистым js!
А по поводу ООП - тут вопрос спорный. Я несколько движков сделал без него, с установкой компонентов. И никаких 100000 строк не было. Всё делается гораздо проще и работает быстро и без ошибок. Пару проектов ООП даже приходилось на функциональное программирование переводить. Оно реально работает медленнее и занимает больше места. Даже отладить невозможно самые простые части кода. В функциональном программировании самое главное, чтобы каждая часть была разделена на файлы, а каждый готовый объект в папке. Много таких папок можно в одну папку объединить и всё. Зато исправить одну строчку уже точно знаешь где. А вот в ООП придётся листать вниз до бесконечности, пока не найдешь то, что нужно. Как некоторые говорят: весь мусор в одном месте))) поэтому пока не разложишь по полочкам - ничего не найдешь, либо найдешь через несколько минут, часов и т.д. А это уже пустая трата времени!
@@user-pk2jz3qf8u Тут видео про php, а не js.
Спасибо за видео!
А по какой книге лучше изучать ООП в PHP?
Почти все книги которые я встречал переписывают документацию в PHP. Если хотите углубится в ООП то можете попробовать книги по C++ или Java, там все более детально описывается.
Как ты так кастомизировал Php storm? Есть отдельное видео?
Немного не понятно про свойства внутри конструктора. То есть можно использовать свойства без предопределения?
Ребят подскажите как закомментировать код, я всегда вручную делала
Зачем создавать конструтор, если можно ограничиться только созданием переменных? Не понял из этого урока пользы.
php.net/manual/ru/language.oop5.decon.php
а если нужно добавить условия, какие-либо функции над данными, а не просто поприсваивать значения? Лучше все эти действия стартовые в конструкторе описать.
@@PIVKOooo Ну так в уроке об этом не сказано! Это уроки для новичков, которые хотят освоить материал, а получают только частный случай, при том самый простой, не описывающий сути вообще... В этом основная проблема и большинство комментов...
Ну если работает как функция, если знаешь как работают функции и для чего они нужны, то освоить это проще просто простого. Вот и весь секрет
Есс
5:43 код такой же как и и в видео но не чего не выводится на страницу сайта
Тоже, php 8.1
немного не понял, при удалении объекта, он должен удалиться, да, логично, но потом я сделал var_dump объекта и ОН СУЩЕСТВУЕТ, со всеми свойствами, может я не правильно понял, но почему так?
var_dump был сделан после всех выполненных действий деструктора?
после конечно же
Объект удалился, но после функции var_dump, т.к деструктор выполняется последним в коде. Поэтому массив с данными вывелся на экран. Попробуй использовать функцию unset объекта перед var_dump, который также вызовет деструктор, но уже непосредственно перед выполнением var_dump.
удали объект функцией unset или присвой ему значение null.
НЕ понял зачем здесь нужен деструктор. В языке C++ он нужен только тогда, когда надо подчистить указатели объявленные с помощью оператора new. Но в PHP указателей ведь нет, что он здесь чистит?
Конструктор вызывается всегда при создании объекта, а деструктор также всегда, но при уничтожении объекта, но мы можем переопределять этот метод, добавляя в него функционал, например открывать и закрывать соединение с БД в этих методах, как в комментариях ниже подметили.
*ツ Подписываюсь и ставлю лайк;) Клевое видео :) буду счастлива видеть Вас на своем канале :)*
ага, спамер, никто не подписывайтесь на него)
Карчое по диструктору хочу другое видео
Ну и не видит нифига переменные переменные в классе, к которым обращаешься через $this->$name. Пишет, что не найдена переменная.
Уже и private и public пробовал их делать.
Спасибо за отличные уроки!!! Есть маленький вопрос. если класы большые и замороченные, или храняться в других файлах, есть простой саособ промониторить все его свойства которые там есть и которые я надобавлял в объэкты?
Это какими замороченными их нужно сделать?
@@SuprunAlexey я начинающий.. мало что смыслю.. ну а если чужой код и я не знаю какие он свойства добавил.. можно как то проверить что уже есть в объэкте или просто скролиш и просматриваеш что туда добавляли?
классно, а cms будет?)
Меня одного бесит, когда вижу что люди выделяют слова не двойным кликом, а протягиванием курсора?
Урок просто срань...
Автор не удосужился объяснить, что эти методы( __construct() и __destruct() ) есть по умолчанию в каждом классе. Просто если программист их не описывает, то они не реализуются. И вообще я заметил, что у данного автора много ошибок в коде, часто чего-то не договаривает, вообще складывается впечатление, что автор данного ютуб канала не профессионал. Кстати, не он один. Часто смотришь очередного "мастера" и диву даешься - ошибка за ошибкой...
Метод __destruct() можно вообще не описывать, т.к. PHP и так закроет выполнение программы и освободит оперативную память. Метод __destruct() используют, чтобы наглядно показать, что программа выполнилась и что это ее завершение. Например, вывести function __destruct() {echo 'Завершение программы';}
Метод function __destruct() записывается в конце тела класса.
А вот метод function __construct() используют, чтобы можно было передавать значения свойства класса сразу в объект. Напр.: $obj = new Class('login','password');
Таким образом в объект $obj с помощью описанного метода __construct() в классе Class будет передано 2 параметра это login и password. Метод __construct() автор описал более или менее нормально.
ну что ж
Если честно такое чувство что я на марафоне и не могу догнать
Слишком быстро ты все рассказываешь за тобой не успеть постоянно приходится видео на паузу ставить!
+Максим Грищенко ок, приму к сведению
нормальная скорость.
P.s. это не ты быстро читаешь, а он медленно слушает.
Pss твои уроки самые быстроусваемые. Есть масса ютюб каналов с обучающими роликами, подкастами, но твой самый лучший!
лайк и респект!
Ну так поставь на паузу, хуле
Я вообще на x2 скорости смотрю - еще тот марафон =)))
видео не на паузу надо ставить , а уменьшить скорость воспроизведения.
Не понятно одно. Какой смысл вводить то что в конструкторе , нельзя просто переменные вставить в гет инфо?
Ты не сможешь задать параметры при объявлении экземпляра. Это займет, как минимум, на одну строку больше пространства в коде. Для калькулятора в уроке - это не страшно, но для программы может оказаться критично. Поэтому лучше разделять понятия конструкторы, методы и свойства, и применять все это с умом, а не абы как. Советую почитать книгу "php. Правильный путь", где подробно говорится о всех нюансах правильного написания красивого и понятного кода.
echo $name, $password, $email, $city
почему нужен этот ооп он вообще оперативку много жреть лучше использовать ассоциативные массив куки и т.д
учи, позже поймешь
не очевидно уничтожение объекта, вывелась надпись, а что объект уничтожен остается верить на слово
Var_damp('объект') результат NULL
Вот на самом деле про диструктор тут не понятно что он делает и примера толкового нету
а прошлые уроки были хорошие так что тут недочет какой то
когда хотел эксперементировать
$user->__construct();
Компуктер взорвался?))
Ага
такой голос занудный, хотя бы музыку включил хоть
Видео у тебя какие-то растянутые про ОПП, можно всё быстро за час рассказать, а не мусолить кучами выпусков.
Да и можно вобще за 10 минут)))
Хотите лучше это понять - учите сначала java:)))
Шутка(или нет...).
шутка так шутка