Свойства объекта в ООП PHP

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



Свойства объекта: php.net


Определение свойства в классе

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

Добавление и переопределение значения свойства вне класса

Вывод информации о созданном объекте

Возможности с версии PHP 5.6




Определение свойства в классе




Свойство объекта - это переменная, описанная в классе.

В папке с уроком создадим папку classes c файлом Car.php:


Файл Car.php


-- файл Car.php --

<?php
class Car // создание класса Car
{
}
?>



В классе мы определяем специальную переменную, которая будет называться свойством (атрибут или поле класса).



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

(php.net)



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

- public (общедоступный) - этот модификатор разрешает доступ к свойствам и методам класса отовсюду,
- protected (защищенный) - этот модификатор разрешает доступ самому классу, наследующим его классам и родительским классам,
- private (закрытый) - этот модификатор ограничивает область видимости так, что только класс, где объявлен сам элемент, имеет к нему доступ.


В нашем классе будем использовать модификатор доступа public.

Зададим для нашего класса четыре свойства. При желании можно задать дефолтные (по умолчанию) значения этим свойствам.


Файл Car.php


-- файл Car.php --

<?php
class Car // создание класса Car
{
// свойства определяем в теле класса:

// (цвет) - свойство класса (атрибут или поле класса)
public $color;

// (количество колес - задаем: 4)
public $wheels = 4;

// (скорость - задаем: 180)
public $speed = 180;

// (марка) - var - перешло из PHP 4 (синоним ключевого слова public)
var $brand;
}
?>



Cоздадим файл index.php и подключим в нем класс Car.php и создадим объект $car1 - 1-й автомобиль и распечатаем его:


Файл index.php


-- файл index.php --

<?php
// подключение файла Car.php
require_once 'classes/Car.php';
// функция для удобной распечатки
function debug($data)
{
echo '<pre>' . print_r($data, 1 ) . '</pre>';
}

// создаем объект (1-й автомобиль)
$car1 = new Car();

// распечатываем объект (1-й автомобиль)
debug($car1);
var_dump($car1);
?>
работа функции debug($data):
Car Object
(
[color] =>
[wheels] => 4
[speed] => 180
[brand] =>
)




Добавление и переопределение значения свойства вне класса




Если свойство определено как public, мы можем добавлять значения вне класса, например:
$car1 -> color = 'черный'; ( знак $ перед color не ставится!!!)
- где "->" - оператор, который позволяет получить доступ к свойству или методу класса.


Также мы можем и переопределить уже имеющиеся свойства:
$car1 -> speed = 200;
Создадим еще один объект $car2 = new Car() и зададим для него значения свойств.


Еще одна особенность объектов, что мы можем добавлять "на лету" новые свойства, которых в классе нет. Для этого обращаемся к объекту и добавляем новое свойство:
$car1 -> year = 2018;

Динамически добавлять свойства не рекомендуется.


Распечатаем переменные $car1 и $car2.


Файл index.php


-- файл index.php --

<?php
// подключение файла Car.php
require_once 'classes/Car.php';
// функция для удобной распечатки
function debug($data)
{
echo '<pre>' . print_r($data, 1 ) . '</pre>';
}

// создаем объект (1-й автомобиль)
$car1 = new Car();
// создаем второй объект (2-й автомобиль)
$car2 = new Car();

// распечатываем объект (1-й автомобиль)
debug($car1);
var_dump($car1);

// обращение к свойству объекта (определяем цвет (вне класса))
// оператор "->" позволяет получить доступ к свойству или методу класса
$car1 -> color = 'черный';
$car1 -> brand = 'volvo';
// переопределяем имеющееся свойство (скорость)
$car1 -> speed = 200;
// добавляем на лету (динамически) новое свойство, которого в классе нет (год выпуска)
// динамически добавлять свойства не рекомендуется
$car1 -> year = 2018;

// зададим свойства для объекта $car2
$car2 -> color = 'белый';
$car2 -> brand = 'bmv';
$car2 -> speed = 220;
$car2 -> year = 2017;

debug($car1);
debug($car2);
?>
Выведет:
1-й автомобиль со свойствами, заданными в классе:
Car Object
(
[color] =>
[wheels] => 4
[speed] => 180
[brand] =>
)
1-й автомобиль с определенными и переопределенными свойствами вне класса:
Car Object
(
[color] => черный
[wheels] => 4
[speed] => 200
[brand] => volvo
[year] => 2018
)
2-й автомобиль с определенными и переопределенными свойствами вне класса
Car Object
(
[color] => белый
[wheels] => 4
[speed] => 220
[brand] => bmv
[year] => 2017
)




Вывод информации о созданном объекте




Обрабатывать данные в двойных кавычках (в одинарных кавычках переменные обрабатываться не будут) и в фигурных скобках вместо операции конкатенации.

Включаем показ ошибок: error_reporting(-1) - пусть нам показывает PHP все ошибки, которые возникают.


Файл index.php


-- файл index.php --

<?php
// включаем показ ошибок
error_reporting(-1);
// подключение файла Car.php
require_once 'classes/Car.php';

// функция для удобной распечатки
function debug($data)
{
echo '<pre>' . print_r($data, 1 ) . '</pre>';
}

// создаем объект (1-й автомобиль)
$car1 = new Car();
// создаем вторй объект (2-й автомобиль)
$car2 = new Car();

// распечатываем объект (1-й автомобиль)
debug($car1);
var_dump($car1);

// обращение к свойству объекта (определяем цвет (вне класса))
// оператор "->" позволяет получить доступ к свойству или методу класса
$car1 -> color = 'черный';
$car1 -> brand = 'volvo';
// переопределяем имеющееся свойство (скорость)
$car1 -> speed = 200;
// добавляем на лету (динамически) новое свойство, которого в классе нет (год выпуска)
// динамически добавлять свойства не рекомендуется
$car1 -> year = 2018;

// зададим свойства для объекта $car2
$car2 -> color = 'белый';
$car2 -> brand = 'bmv';
$car2 -> speed = 220;
$car2 -> year = 2017;

// вывод информации о созданом объекте (автомобиле)
// (обрабатывать в двойных кавычках! и в фигурных скобках)
echo "<h3>О моем авто:</h3>
Марка: {$car1->brand}<br>
Цвет: {$car1->color}<br>
Кол-во колес: {$car1->wheels}<br>
Год выпуска: {$car1->year}<br>
Скорость: {$car1->speed}<br> ";
?>
выведет:
О моем авто:

Марка: volvo
Цвет: черный
Кол-во колес: 4
Год выпуска: 2018
Скорость: 200




Возможности с версии PHP 5.6




С версий PHP 5.6 и больше можно присваивать свойству результаты вычислений, использовать оператор конкатенации.


Файл Car.php


-- файл Car.php --

<?php
class Car // создание класса Car
{
// свойства определяем в теле класса:

// (цвет) - свойство класса (атрибут или поле класса)
public $color;
// (количество колес - задаем: 4)
public $wheels = 4;
// (скорость - задаем: 180)
public $speed = 180;
// (марка) - var - перешло из PHP 4 (синоним ключевого слова public)
var $brand;

// возможность с версии PHP 5.6
// определение пути к папке test (использование оператора конкатенации)
public $paht = __DIR__ . '/test';
// публичное свойство $test (присваивание свойству результата вычислений)
public $test = 1+2 ;
}
?>
После распечатки в индексном файле выведет:
Car Object
(
[color] =>
[wheels] => 4
[speed] => 180
[brand] =>
[paht] => C:\OSPanel\domains\PHPoop1\02\classes/test - путь к папке test
[test] => 3 - результат выражения 1+2
)



Содержание папки 2 ("Свойства объекта"):


02-1






Наверх Наверх