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

Добро пожаловать, ambitioznЫЕ программисты! Сегодня мы окунемся в захватывающий мир классов и объектов PHP. Не worry, если эти термины кажутся вам немного пугающими - к концу этого урока вы будете создавать свои собственные классы и объекты, как профессионalf!

PHP - Classes and Objects

Что такое классы и объекты?

Прежде чем перейти к коду, давайте поймем, что такое классы и объекты. Представьте, что вы строите дом. Класс будет resemble план дома, а объект - этоactual дом, построенный по этому плану. Вы можете создать много домов (объектов) из одного плана (класса).

Определение класса в PHP

Давайте начнем с создания нашего первого класса PHP. Мы создадим простой класс Car.

<?php
class Car {
// Свойства класса
public $brand;
public $color;

// Метод класса
public function startEngine() {
return "Vroom! The $this->color $this->brand is starting.";
}
}
?>

Давайте разберем это:

  1. Мы начинаем с ключевого слова class, за которым следует имя нашего класса (в данном случае, Car).
  2. Внутри класса мы определяем свойства (variables) такие как $brand и $color.
  3. Мы также определяем метод (функцию) под названием startEngine().

Создание объектов из класса

Теперь, когда у нас есть класс Car, давайте создадим несколько объектов машин!

<?php
// Создание объектов машин
$myCar = new Car();
$myCar->brand = "Toyota";
$myCar->color = "Red";

$friendsCar = new Car();
$friendsCar->brand = "Honda";
$friendsCar->color = "Blue";

// Использование метода объекта
echo $myCar->startEngine();
echo $friendsCar->startEngine();
?>

Результат:

Vroom! The Red Toyota is starting.
Vroom! The Blue Honda is starting.

Вот что происходит:

  1. Мы используем ключевое слово new для создания объектов из нашего класса Car.
  2. Мы устанавливаем свойства каждого объекта, используя оператор стрелки (->).
  3. Мы вызываем метод startEngine() для каждого объекта.

Конструктор метода

Теперь давайте сделаем наш класс немного более сложным, добавив конструктор. Конструктор - это special метод, который вызывается при создании объекта.

<?php
class Car {
public $brand;
public $color;

// Конструктор
public function __construct($brand, $color) {
$this->brand = $brand;
$this->color = $color;
}

public function startEngine() {
return "Vroom! The $this->color $this->brand is starting.";
}
}

// Создание объектов машин с помощью конструктора
$myCar = new Car("Toyota", "Red");
$friendsCar = new Car("Honda", "Blue");

echo $myCar->startEngine();
echo $friendsCar->startEngine();
?>

Конструктор позволяет нам устанавливать brand и color при создании объекта, делая наш код чище и эффективнее.

Наследование

Одна из мощных функций ООП - наследование. Оно позволяет нам создавать новый класс на основе существующего. Давайте создадим класс ElectricCar, который наследуется от нашего класса Car.

<?php
class ElectricCar extends Car {
public $batteryLife;

public function __construct($brand, $color, $batteryLife) {
parent::__construct($brand, $color);
$this->batteryLife = $batteryLife;
}

public function chargeBattery() {
return "The $this->color $this->brand is charging. Current battery life: $this->batteryLife%";
}
}

$teslaModel3 = new ElectricCar("Tesla", "White", 80);
echo $teslaModel3->startEngine();
echo $teslaModel3->chargeBattery();
?>

Результат:

Vroom! The White Tesla is starting.
The White Tesla is charging. Current battery life: 80%

Здесь ElectricCar наследует все свойства и методы Car и добавляет свои собственные свойства ($batteryLife) и метод (chargeBattery()).

Модификаторы доступа

В ООП мы можем контролировать видимость свойств и методов с помощью модификаторов доступа. Их три:

Модификатор Описание
public Доступен из anywhere
protected Доступен внутри класса и производных классов
private Доступен только внутри класса

Давайте изменим наш класс Car, чтобы использовать их:

<?php
class Car {
protected $brand;
private $engineStarted = false;

public function __construct($brand) {
$this->brand = $brand;
}

public function startEngine() {
$this->engineStarted = true;
return "The $this->brand's engine is now running.";
}

public function isEngineRunning() {
return $this->engineStarted;
}
}

$myCar = new Car("Toyota");
echo $myCar->startEngine();
echo $myCar->isEngineRunning() ? "Engine is running" : "Engine is off";
// Это вызовет ошибку: echo $myCar->engineStarted;
?>

Теперь $brand является защищенным (доступен в производных классах), $engineStarted является частным (доступен только внутри класса Car), а наши методы остаются общественными.

Заключение

Поздравляю! Вы только что сделали свои первые шаги в мир объектно-ориентированного программирования с PHP. Мы рассмотрели классы, объекты, конструкторы, наследование и модификаторы доступа. Эти концепции являются основой ООП и будут служить вам хорошо по мере продолжения вашего пути в программировании.

Помните, что практика makes perfect. Попробуйте создать свои собственные классы, экспериментируйте с различными свойствами и методами и не бойтесь ошибок - это как мы учимся! Счастливого кодирования!

Credits: Image by storyset