Свойства объектов

Свойство класса/объекта, простыми словами, — это переменная описанная в классе. Эта формулировка не до конца верна, но немного упрощает понимание понятия свойства.

Создадим по канонам всех классических туториалов класс Car:

<?php 

class Car
{
	
}

И далее определим свойство класса, держа в голове, что мы уже знаем про модификаторы доступа, о которых поговорили выше.

Добавим свойства для нашей машины — цвет, количество колес, и скорость.

<?php 

class Car
{
	public $color;
	public $wheels;
	public $speed;
}

Добавим еще бренд и значения некоторых свойств по умолчанию:

<?php 

class Car
{
	public $color;
	public $wheels = 4;
	public $speed = 120;
	public $brand;
}

Все, наш класс готов, свойства созданы и теперь можем создать объект этого класса bmw и вывести подтверждение на экран:

<?php 


require_once 'classes/Car.php'; // подключение файла с классом Car

$bmw = new Car; // создание нового объекта

var_dump($bmw); // вывод информации об объекте

Напоминаю, что у нас класс Car находится в отдельном файле в папке classes, а подключение файла с классом и создание нового объекта происходит в файле index.php.

Есть еще один отличный лайфхак для удобной работы с выводом данных, который можно использовать при работе с массивами и объектами. Мы создадим небольшую функцию deb (от слова debug) в папке includes и подключим ее в файле index.php:

<?php 

function deb($data){
	echo '<pre>' . print_r($data, 1) . '</pre>';
}

А файл index.php теперь выглядит так:

<?php 

require_once 'includes/functions.php';
require_once 'classes/Car.php';

$bmw = new Car;

deb($bmw);

В браузере мы видим удобное отображение нашего объекта:

Car Object
(
    [color] => 
    [wheels] => 4
    [speed] => 120
    [brand] => 
)

Значения для свойств объекта мы можем добавлять вне класса, не обязательно значения определять внутри класса. Но свойство должно иметь модификатор доступа — public.

Давайте поменяем скорость для нашего объекта класса Car. Делается это простым способом:

$bmw->speed = 180;

Давайте также определим цвет машины и название бренда, после чего выведем всё на экран:

$bmw->speed = 180;
$bmw->color = 'Black';
$bmw->brand = 'BMW';

deb($bmw); // функция удобного вывода на экран, которую мы определили ранее

При обращении к свойству знак доллара ($) мы не ставим. Таким образом мы можем создать множество объектов. Например, создадим второй объект этого класса и определим его свойства:

$vaz = new Car;

$vaz->speed = 100;
$vaz->color = 'Silver';
$vaz->brand = 'VAZ';

deb($vaz);

Кроме уже созданных свойств мы можем добавлять свойства для объекта, которых нет в классе. Допустим мы хотим создать свойство «год выпуска» для объекта $vaz:

$vaz = new Car;

$vaz->speed = 100;
$vaz->color = 'Silver';
$vaz->brand = 'VAZ';

$vaz->year = '1999'; // добавили год к объекту

deb($vaz);
Важно! Такой метод добавления свойства к объекту — не рекомендуется.

Давайте теперь посмотрим как мы можем вывести информацию про наши созданные объекты на веб-страницу, чтобы пользователям было удобно читать все данные.

echo "Марка машины: {$vaz->brand}" . "<br>";
echo "Цвет машины: {$vaz->color}" . "<br>";
echo "Скорость машины: {$vaz->speed}" . "<br>";
echo "Колес: {$vaz->wheels}" . "<br>";

// можно и так
echo "Колес: $vaz->wheels" . "<br>";

В PHP если имя переменной заключено в двойные (не одинарные!) кавычки, то переменная интерполируется, что мы видим в выводе на страницу:

Марка машины: VAZ
Цвет машины: Silver
Скорость машины: 100
Колес: 4

Важное замечание стоит сделать, что с версии PHP 5.6 мы можем при определении свойств в значениях использовать выражения (2 + 2), конкатенацию ( ‘Hi’ . ‘ John’ ) и т.д.

Была ли эта страница полезной?