Классы и объекты в PHP

04.05.2018 в 13:05
27004
+2016

Сегодня мы поговорим о том, что вообще такое объектно-ориентированное программирование и о том, как оно реализовано в PHP. Здесь же поговорим о классах и объектах, об их различии и предназначении.

Объектно-ориентированное программирование

До этого момента мы с вами писали простейшие скрипты, представляющие собой небольшой набор php-файлов, подключаемых один внутри другого. В них всё было довольно просто - у нас были функции, которые мы вызывали одну за другой. С таким подходом можно без проблем делать простые проекты.

Однако, если приложение становится большим и над проектом работают сразу несколько человек, то требуется использовать другой подход - объектно-ориентированное программирование. Вся его суть лежит в его названии - объектно-ориентированное. То есть основанное на объектах. Если говорить более развернуто, то это подход, базирующийся на объектах и на взаимоотношениях между ними.

Что вообще за объекты такие?

Давайте на минутку забудем о программировании и подумаем: что такое объекты. Да это всё, что нас окружает. Взгляните на комнату вокруг. Вот же: стул, стол, цветок, ручка, листок бумаги - всё это является объектами. Вы, в том числе, тоже объект. Вы можете взять ручку и начать что-то писать на листе бумаги. Это - взаимодействие между объектами. А ещё, если присмотреться, то можно понять, что все объекты созданы по какому-то определенному шаблону.

Возьмем к примеру те же шариковые ручки: одна - желтая, другая - синяя. Да, цвет у них разный, но если вы посмотрите на них, то безошибочно их классифицируете как ручки. И вы понимаете, что для того, чтобы сделать ручку, нужен какой-то чертёж, по которому её будут собирать. И то же самое со столом, стулом, и даже Вами - ваша ДНК содержит "шаблон", по которому вы в итоге собрались.

Ровно то же самое происходит и в объектно-ориентированном программировании. Виртуальные объекты создаются на основе специальных шаблонов, называемых классами. Класс - это своего рода "чертёж", на основе которого будут созданы объекты. Объект же, как из этого следует - это экземпляр какого-то класса. То есть сущность, созданная по этому шаблону.

Классы в PHP

Итак, представим, что мы хотим создать некоторую упрощенную модель котика в PHP. Для этого нам сперва надо сделать его "чертёж", а именно - создать класс. Мы смотрим на котиков и понимаем что это котики. Это происходит по тому, что все котики имеют какие-то общие признаки. По этим признакам мы можем отличать одни классы объектов от других.

Классы в PHP создаются с помощью слова class, за которым следует имя класса. Имя класса должно быть написано в CamelCase и начинаться с большой буквы. Затем с новой строки открывается фигурная скобка, далее идёт тело класса, и, наконец, закрывающая фигурная скобка.

Итак, самый простейший пример класса котика выглядит следующим образом:

class Cat
{
    // тело класса
}

Сам по себе этот код сейчас ничего не выведет. Это - просто шаблон. Точно так же, как если бы мы просто описали функцию.

Объекты в PHP

Итак, мы сделали некоторый шаблон, который описывает котиков. Пора бы уже и котика по нему собрать. А именно - создать объект.

Объекты создаются с помощью ключевого слова new:

<?php
class Cat
{
}

$cat1 = new Cat();

var_dump($cat1);

Так мы создали объект с типом Cat и вывели его с помощью var_dump().

object(Cat)[1]

Как видим, в переменной лежит объект (object). И больше пока ничего.

Мы можем создать ещё несколько котиков, и все они будут объектами этого класса:

<?php

class Cat
{
}

$cat1 = new Cat();
$cat2 = new Cat();
$cat3 = new Cat();

var_dump($cat1);
var_dump($cat2);
var_dump($cat3);

Результат этого кода:

object(Cat)[1]
object(Cat)[2]
object(Cat)[3]

Видим, что это действительно объекты класса Cat, однако их идентификаторы разные: 1, 2 и 3 (в PHP каждый отдельный объект имеет собственный идентификатор).

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

loader
04.05.2018 в 13:05
27004
+2016
Домашнее задание
  • Вступите в наш чат в Telegram - https://t.me/php_zone, если ещё этого не сделали.
Логические задачи с собеседований