Ооп в php продвинутый курс
Объектно-ориентированный подход в PHP
В этом уроке мы подошли к той теме, ради которой были сделаны все предыдущие уроки этого курса. Мы изучили основные возможности объектно-ориентированного программирования в PHP, а сейчас мы поговорим о том, что же нам реально позволяет делать объектно-ориентированный подход в программировании на PHP.
Вся суть объектно-ориентированного программирования – это про взаимодействие одних объектов с другими объектами. Сама эта концепция, как не трудно догадаться, пришла к нам из реальной жизни – ведь здесь происходит ровно то же самое.
Мы создаём объекты, добавляем в них свойства и методы. Всё что с модификатором public – это интерфейс, через который мы можем взаимодействовать с объектом. Через этот интерфейс мы можем изменять внутреннее состояние объекта, добиться от него каких-то действий, или получить от него что-то. Аналогично и в жизни – у человека, например, есть органы чувств – это тоже интерфейс. Сказав что-то человеку в его ухо, можно неплохо так изменить его внутреннее состояние. Можно помахать человеку рукой, в интерфейс «глаз». В ответ он может return-уть в ответ тем же, а может и нет, зависит от его внутреннего состояния.
Как вы понимаете, возможность разделить логику программы по отдельным классам – это большой плюс. Это позволяет разделить зоны ответственности, каждый класс содержит свою логику, и вы будете знать, что класс Article – содержит в себе функционал, который отвечает за статьи на сайте, а класс User – за пользователей. И если вам что-то нужно будет изменить, вы будете знать где это искать. К примеру, нужно добавить для статей возможность за них голосовать. Вы будете добавлять этот функционал в классе Article, а не где-то ещё.
Давайте покажем пример взаимодействия двух объектов – статья и пользователь. Предположим, у статьи должны быть заголовок и текст, а ещё у неё обязательно должен быть автор. Тогда наш код будет выглядеть следующим образом:
Заметили? В конструктор мы передаём объект класса User, а не что-либо ещё. Это тайп-хинтинг – мы про него уже говорили. Он позволяет указывать в аргументах типы передаваемых переменных, однако до этого мы использовали только скалярные типы – строки, числа. Но в PHP можно указывать в качестве типов и объекты!
Давайте проверим, что всё работает. Создадим пользователя и создадим новую публикацию от его имени.
Все успешно отработало и мы получили следующий вывод:
Видим объект класса Article, у которого в свойстве author лежит объект класса User.
Теперь, если мы захотим получить имя автора статьи мы сможем сделать это следующим образом:
Как это работает? Да всё очень просто. Мы с помощью метода getAuthor() получили от статьи объект с типом User, а далее сразу же у этого объекта вызвали метод getName() и получили строковое значение поля name. Вот это и есть объектно-ориентированный подход – взаимодействие между объектами.
Ещё про тайп-хинтинг
Благодаря тому, что мы можем проверять типы передаваемых переменных, мы можем гарантировать, что автором статьи, например, не является кот. Давайте попробуем такое провернуть.
Это, разумеется, приведет к ошибке. Третий аргумент должен быть с типом User, а передан Cat. Ахтунг!
Тайп-хинтинг позволяет избежать ошибок.
А теперь давайте вспомним оператор instanceof. Помните, что при проверке объектов дочерних классов на родительский, он возвращал true? То же актуально и для тайп-хинтинга. Давайте создадим класс Admin, который будет наследником класса User. И попробуем передать его в качестве автора статьи:
Такой код корректно отработает, потому что Admin – это тоже User. Обратное, разумеется, неверно. Если мы в конструкторе статьи разрешим в качестве автора передавать только объекты класса Admin, то если туда передадим объект класса User, то скрипт упадёт с ошибкой, потому что не всякий User является Admin-ом. Что, согласитесь, вполне логично.
Заключение
Ну вот мы и изучили основы ООП, дальше мы будем учиться их правильно применять, а это уже намного интереснее. До встречи в следующих уроках!
ООП в PHP: продвинутый курс
Получаем знания для устройства на работу. Первые 5 уроков бесплатно!
Подробнее о курсе
Что Вы получите в продвинутом курсе ООП в PHP
В данном курсе вы научитесь программировать на PHP в объектно-ориентированном стиле. Данное умение просто необходимо для разработки проектов, в которых участвует более одного человека – то есть на настоящей работе.
В ходе курса вы ознакомитесь с принципами ООП. Узнаете что такое классы и объекты. Далее мы изучим такие понятия как инкапсуляция, наследование и полиморфизм – это три кита, на которых стоит всё ООП.
Кроме того, вы познакомитесь с архитектурным паттерном MVC, который является фундаментальным для построения подавляющего большинства всех веб-приложений.
Разумеется, что это за продвинутый курс, если в нём не будет уроков о работе с базой данных. Здесь вы узнаете, как правильно работать с MySQL, используя технологию ORM и паттерн ActiveRecord.
Ну и конечно, всё это было бы неинтересно и непонятно без хороших примеров. Поэтому в ходе прохождения курса мы с вами самостоятельно напишем мини-фреймворк, на основе которого сделаем настоящий блог!
В заключение я расскажу о подготовке к собеседованиям и о том, куда двигаться дальше и как расти.
Программа курса
Уровень 1. Основы ООП
Уровень 2. Архитектура приложения
Уровень 3. Пишем блог на PHP
Уровень 4. Заключение
Преподаватели программы
Отзывы о программе
Курс очень хороший, все ясно и понятно изложено. Постепенный рефакторинг кода позволяет разобраться что к чему. С первого раза сложно ухватить такой объем материала, поэтому проходила 2 раза, сейчас буду пытаться переделать на MVC свой проект, написанный в процедурном стиле.
Чего не хватило: не затронута тема транзакций и работы с базой данных в случае необходимости одновременного апдейта нескольких таблиц (связь один ко многим). При наличии этого материала — было бы идеально.
Существуют ли продвинутые php-курсы на русском языке?
Всем привет! Хотелось бы узнать, есть ли в рунете курсы (материалы, лекции, учебники) по PHP, которые представляют собой что-то иное, чем пересказ книги «PHP в подлиннике».
То есть на всех сайтах, что я видел, был стандартный набор тем: синтаксис, работа с формами, стандартные ф-ции по файлам, массивам датам и т.п.
Ну и основы ООП в php (самый минимум).
Есть ли какие-либо расширенные материалы? И ли же их в принципе не существует, и дальнейшее обучение стоит строить, осваивая какой-либо фреймворк?
>И ли же их впринципе не сущствует, и дальнейшее обучение стои строить осваивая какой либо фреймворк?
Дальнейшее обучение лучше строить на том, чтобы попытаться написать свой фреймворк для какого-нибудь проекта. Спросите знакомых, может кому-то жизненно необходим какой-либо узкоспециализированный сайт или сервис или crm или еще чего-нибудь, в крайнем случае придумайте сложный проект. Заодно и ТЗ писать научитесь, а также разберетесь в вопросах проектирования приложений, оптимизаций, костылей 🙂
Разбирать существующие фреймворки, имхо, стоит лишь тогда, когда будете уверенно себя чувствовать в коде. Чтобы не метаться в панике, когда наткнетесь на баг фреймворка, а самостоятельно залатать.
1. Определи область интересов в программировании
2. Поставь задачу или две в этой области
3. Решай задачи
4. Ищи решение лучше: на фреймворках, на шаблонах, на других языках
5. Удали решение к чёрту, чтобы не мешало
6. Повтори с пункта 3
В свое время в отделе, в котором я работал, нужно было написать небольшой фреймворк для специфичных задач так как существующие не были сильно избыточны. Это дело поручили мне, а с пыхом я был знаком только по слухам. Хотя раньше шпилил на др языках.
Для того что бы «проникнуться» духом пыхыпы перелопатил половину исходников этого фреймворка (правда тогда это была первая версия). Понял очень многое: как строятся сложные системы на пыхе, как в нем патерны применять, какие есть хаки и фичи в языке.
Это муторно и скучно, но, поверьте, оно того стоит.
А без английского языка выше джуниора подняться не получиться. Актуальная информация только на оргинале. НА русский переводят уже устаревшую.
ООП в PHP: продвинутый курс
Изучаем объектно-ориентированное программирование
Об авторе проекта
Привет! Меня зовут Артём Ивашкевич.
Я увлекаюсь программированием более 10 лет и зарабатываю этим на жизнь более 5 лет. Сейчас я работаю backend-разработчиком в компании ВКонтакте.
В свободное от работы время я пишу статьи о разработке и обучаю программированию других людей, потому что мне это просто нравится.
Если вам интересно узнать, как я к этому пришёл, прочитайте историю как я стал программистом.
Привет! Меня зовут Артём Ивашкевич.
Я увлекаюсь программированием более 10 лет и зарабатываю этим на жизнь более 5 лет. Сейчас я работаю backend-разработчиком в компании ВКонтакте.
В свободное от работы время я пишу статьи о разработке и обучаю программированию других людей, потому что мне это просто нравится.
Если вам интересно узнать, как я к этому пришёл, прочитайте историю как я стал программистом.
При обучении я стараюсь давать то, что действительно нужно на практике. С помощью учебных материалов на этом сайте вы сможете подготовиться к собеседованию на должность разработчика с нуля.
Что вы получите в продвинутом курсе ООП в PHP
В данном курсе вы научитесь программировать на PHP в объектно-ориентированном стиле. Данное умение просто необходимо для разработки проектов, в которых участвует более одного человека – то есть на настоящей работе.
В ходе курса вы ознакомитесь с основами и принципами ООП в PHP для начинающих. Узнаете что такое классы и объекты. Далее мы изучим такие понятия как инкапсуляция, наследование и полиморфизм – это три кита, на которых стоит всё ООП.
Кроме того, вы познакомитесь с архитектурным паттерном MVC, который является фундаментальным для построения подавляющего большинства всех веб-приложений.
Разумеется, что это за продвинутый курс, если в нём не будет уроков о работе с базой данных. Здесь вы узнаете, как правильно работать с MySQL, используя технологию ORM и паттерн ActiveRecord.
Ну и конечно, всё это было бы неинтересно и непонятно без хороших примеров. Поэтому в ходе прохождения курса мы с вами самостоятельно напишем мини-фреймворк, на основе которого сделаем настоящий блог!
Отзывы учеников
Евгения Филиппова
Преимущества
Проверка домашек
К урокам есть задания для самостоятельной работы. Ко многим темам накопилось уже более 500 комментариев с детальным разбором ДЗ.
Быстрая помощь
Все ученики имеют доступ к общему Telegram-чату, в котором можно задать вопросы и получить ответ в течение 10 минут. Нас уже больше 1000!
Бесплатно
Не, ну вы видели эти цены на курсы в десятки тысяч рублей?
Здесь вы можете пройти обучение бесплатно!
Коммьюнити
Участники нашего сообщества помогают друг другу. Здесь вы можете получить совет от практикующих программистов.
Программа курса
Основы ООП
Архитектура приложения
Пишем блог на PHP
Заключение
Для чего нужен продвинутый курс ООП в PHP
Программирование является довольно сложным делом, освоение которого требует особой внимательности и терпения. Особенно часто при изучении программирования возникает проблема отсутствия направления движения и не совсем четкое понимание конечной цели.
Курс ООП в PHP для начинающих позволяет обучить лучшим практикам и современным инструментам программирования. Также здесь можно научиться разрабатывать сложный работающий проект. Для осуществления веб-программирования на достойном уровне и понимания процесса разработки сайтов важно также получить необходимое количество актуальной информации по данному вопросу.
Этот продвинутый курс PHP предназначается для людей, которые имеют некоторый опыт полупрофессиональной разработки сайтов. На этих занятиях будет уделяться особое внимание разработке правильной и продуманной архитектуры сайта. Это позволит легко изменить и расширить проект при необходимости.
Для обучения созданию современной архитектуры сайтов невозможно обойтись без основ объектно-ориентированного программирования на PHP. Вначале у многих разработчиков веб-приложений объектно-ориентированный подход вызывает небольшое недоумение, ведь более привычным для них является процедурный подход. Но курс ООП в PHP для чайников поможет быстро справиться с данными трудностями. На уроках ООП в PHP будут рассмотрены теоретические аспекты, после чего пройдет подробное обучение их применению на практике. В течение всего периода курсов последовательно будут изучаться основы ООП, что позволит создавать приложения на PHP в объектно-ориентированном стиле с нуля.
Пройдя подобный продвинутый курс, можно легко разобраться в довольно сложном объектно-ориентированном программировании с нуля на PHP. Слушатели познакомятся также с такими понятиями, как классы, объекты и узнают об отличиях между ними. Кроме того, на курсах их познакомят со свойствами, методами и константами класса. Данная обучающая программа позволяет использовать наследование классов для того, чтобы создаваемые веб-приложения были более удобными и подчинялись строгой логике.
Также каждый продвинутый курс создает все условия для получения разветвленных иерархий классов, переопределения методов и расширения их функционала. В результате этого появляется возможность легко создавать абстрактные классы. Обучение на данных курсах является уникальным решением для использования интерфейсов во всех необходимых случаях и более точного понимания их смысла. Также на курсах большое внимание уделяется автозагрузке классов, что исключает образование длинных списков файлов при их подключении. Наш продвинутый курс дает полное представление о функциях автозагрузки и использовании пакетного менеджера Composer для решения подобных задач.
Какие возможности получают ученики после курсов?
Для разработки многих современных сайтов и web приложений полностью или частично используются готовые решения на основе классов, объектов или пакетов. Они соответствуют определённым международным стандартам. При владении основными общими принципами программирования из объектно-ориентированного PHP разработчик может легко и быстро переходить из одной системы в другую. Также важно иметь знания проектирования пакетов и платформ.
На курсах студенты смогут подробно познакомиться с методологиями проектирования и созданием пакетов по общепринятым международным стандартам. Также они получат первоначальные знания относительно специфики программирования среды PHP7.
Продвинутый курс PHP предназначен для тех, кто имеет знания основного курса и стремится к повышению своего профессионализма в разработке до уровня junior PHP developer. Кроме того, обучение позволит приобрести необходимые навыки работы в команде.
Остались вопросы?
Основы работы с ООП в PHP. Часть 1
Учебник PHP
Практика
Важное
Регулярки
Работа с htaccess
Файлы, папки
Сессии и куки
Работа с БД
Практика по работе с БД в PHP
Перед чтением см. новые уроки раздела «Важное», которые появились выше.
Практика
Движок PHP
Продвинутые БД
Аутентификация
Практика
ООП и MVC
Абстрактные классы и интерфейсы
Трейты
ООП Магия
Практика
Практика: классы как набор методов
Сейчас мы с вами займемся изучением ООП в PHP.
Что такое объекты в жизни
Давайте рассмотрим пример из жизни, а потом перенесем его на PHP. Пусть у нас есть автомобиль. У него есть колеса, цвет, вид кузова, объем двигателя и так далее. Кроме того, водитель может отдавать ему команды: ехать, остановится, повернуть направо, налево и тп.
Можно говорить о том, что существует некоторый класс автомобилей, обладающий общими свойствами (у всех есть колеса и всем им можно отдавать команды).
Если бы мы программировали автомобиль, то можно было бы сделать что-то вроде такого:
Как оказалось, программировать в терминах объектов и классов достаточно удобно. Давайте посмотрим, как это делается в PHP.
Наши первые классы и объекты
Давайте теперь сделаем 2 юзера (объекта) ‘Коля’ и ‘Вася’, заполним их данными и выведем на экран сумму их возрастов:
Методы
Переменная $this указывает на объект класса и предназначена для использования внутри класса.
Итак, сделаем так, чтобы метод show возвращал имя юзера:
Сделаем что-нибудь полезное с методами
Разбираем public и private
Давайте теперь разберем, что делает ключевое слово public, которое мы писали перед всеми свойствами и методами.
Ключевое слово public указывает на то, что данные свойства и методы доступны извне (вне кода класса). В противоположность public есть ключевое слово private, которое указывает на то, что свойства и методы недоступны извне.
То же самое касается и свойств. Некоторые свойства выполняют чисто вспомогательную функцию, и не должны быть доступны вне класса, иначе мы их можем случайно поредактировать и сломать наш код.
Геттеры и сеттеры
Очень часто все свойства объекта делают приватными, а для доступа к ним реализуют специальные методы.
Аналогично поступим с возрастом и вот, что у нас получится:
Давайте теперь разбираться, зачем это нужно.
Во-первых, таким образом мы можем создавать свойства только для чтения. Например, возраст можно будет только получить через getAge, но нельзя будет поменять без setAge.
Такие методы, как мы реализовали, называются геттерами и сеттерами.
Рассмотрим private методы
Давайте для сеттера setAge реализуем вспомогательный private метод checkAge, который будет проверять возраст на корректность перед его установкой:
Метод __construct
Существует специальный встроенный метод __construct. Это метод (если мы его написали в коде) будет вызываться при создании объекта. Пример:
В __construct можно также передавать параметры:
Чем может быть полезен этот метод? Давайте, для примера, сделаем объект User, для которого в момент создания объекта будут указываться имя и возраст. Эти значение в дальнейшем нельзя будет поменять, а только прочитать (геттеры сделаем, а сеттеры нет):
Наследование
Наследование реализуется с помощью ключевого слова extends, вот так: class Worker extends User.
Вот реализация класса Worker:
Ключевое слово protected
Перегрузка и parent::
Пусть у нас есть класс Student, наследующий от класса User метод setAge. Предположим, что этот метод setAge от родителя нам чем-то не подходит и мы хотим написать свою реализацию в классе-потомке. Так можно делать (это называется перегрузка).
Давайте напишем студент свой setAge в классе Student. Наш setAge будет проверять то, что возраст студента меньше 25 лет:
Пусть мы затерли (перегрузили) метод родителя, но хотели бы использовать и его. То есть мы хотим иметь в классе Student свой метод setAge а также метод родителя setAge. В этом случае к методу родителя можно обратиться так: parent::setAge().
Давайте доработаем наш класс Student так, чтобы использовался метод setAge родителя (убираем некоторое дублирование кода таким образом):
На использование классов внутри других классов
Бывает такое, что мы хотели бы использовать методы одного класса внутри другого, но не хотели бы наследовать от этого класса.
Пусть, к примеру, у нас есть класс User, который хочет использовать класс работы с базами данных Db. Создадим внутри User новый объект класса Db, запишем его в любую переменную, например, в $this->db и будем спокойно использовать public методы и свойства класса Db:
Некоторая практика
Давайте напишем реализацию класса Db и класса User. Попробуйте сами разберитесь в этом коде:
Переменные названия свойств и методов
Названия свойств и методов можно хранить в переменной. К примеру, есть переменная $var, в которой лежит строка ‘name’. Тогда обращение $user->$var по сути эквивалентно обращению $user->name.
Иногда такие финты полезны.
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку.