Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Классы PHP: Введение в ООП

Аналогом структур из Си в PHP являются классы (как вы увидите позже, классы устроены намного сложнее). По крайней мере, в первом приближении.

<?php

// Обратите внимание на стиль, где ставятся открывающие и закрывающие скобки:
class Point
{
    public $x;
    public $y;
}

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

Одно из отличий классов от структур связано с наличием встроенного механизма защиты данных. Ключевое слово public делает свойства публичными, то есть доступными снаружи для чтения и модификации. Это поведение аналогично тому, как ведут себя элементы структур. Кроме public есть и другие варианты, но мы их рассмотрим позже, когда поговорим об инкапсуляции и методах.

Определив класс, можно начать создавать объекты или, как их ещё называют, экземпляры (instance) класса. На текущий момент достаточно рассматривать объект как конкретную структуру данных с конкретными данными.

<?php

// Создаём объект класса Point
$point = new Point();

// По умолчанию значения равны null
print_r($point->x); // => null
print_r($point->y); // => null

// Обратите внимание на синтаксис. Такой вызов неверный: $point->$x.
$point->x = 5;
$point->y = 10;

print_r($point->x); // => 5
print_r($point->y); // => 10

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

Попробуйте создать данный класс на replit.com. Создайте несколько экземпляров, распечатайте их, измените свойства.

Если распечатать объект на экран print_r($point), то можно увидеть его структуру и значения всех свойств.

Point Object
(
    [x] => 5
    [y] => 10
)

Классы как рекурсивная структура данных

Как и в случае со структурами, значением свойства объекта может быть другой объект. Ограничений на вложенность никаких нет: объекты, содержащие объекты, которые содержат объекты — это нормально.

<?php

class Circle
{
    public $center;
    public $radius;
}

$circle = new Circle();
$circle->radius = 3;
$circle->center = new Point();
$circle->center->x = 5;
$circle->center->y = 10;

print_r($circle->center->x); // => 5
print_r($circle->radius); // => 3

Типы данных

В PHP около 10 встроенных типов данных, с большинством которых мы уже знакомы, например со строками или массивами. Объекты в этом списке представлены типом object.

<?php

gettype($circle); // object
gettype($point); // object

С другой стороны, каждый класс в PHP может рассматриваться как пользовательский тип данных, а его объекты-значения (инстансы) — как данные этого типа. На синтаксическом уровне классы наравне с обычными типами могут использоваться для описания входных и выходного типов данных функций.

<?php

function showUser(User $user) {
    // ...
}

Такое определение вызовет ошибку при передаче в функцию любых посторонних данных.

Вывод

Классы — основной способ описывать программные абстракции в PHP; следовательно, объекты — основной способ их использования. Знакомиться с этими понятиями непросто из-за обилия новых терминов, конструкций языка и просто того, что PHP во многих аспектах с объектами ведёт себя не так, как с другими данными. Но просто выучить эти особенности недостаточно для понимания того, что такое ООП, и как писать в этом стиле. Эту ситуацию можно сравнить с игрой в шахматы. Знание, как ходят фигуры, не делает из вас шахматиста. Обучение самой игре — процесс долгий и достаточно сложный. Большая часть этого курса посвящена изучению базовых правил, а вот практика отрабатывается дальше в курсах, посвящённых веб-разработке и ORM. Поэтому не переживайте, что даже зная, как описывать классы и создавать объекты, вы ещё некоторое время не будете понимать, как создавать полноценные программы.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 120 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
29 сентября 8 месяцев

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»