<?php

/*ПРАКТИЧЕСКОЕ ПРИМЕНЕИЕ НАСЛЕДОВАНИЯ*/
//Наследование - это механизм позволяющий определять дочерний класс(производный класс) на основе родительского класса(супер класс), забрав все его свойства и методы.
//Ключевое слово extends - обозначает что первый указанный клас наследует все свойства и методы второго указанного класса(class 1класс extends 2класс). Не забываем что к свойствам и методом с пометкой private он доступ иметь не будет
//В дочернем классе можем переопределять все свойства и методы родительского класса.
//Ключевое слово final - ставиться впереди метода и не позволяет переопределить метод в дочернем классе, указывает что это финальная версия
require_once getenv("DOCUMENT_ROOT") . "/lib/config.php";
require_once "PointRed.php";
$point_red = new PointRed(4, 7);
echo $point_red->getX() . "<br/>";
echo $point_red->getY() . "<br/>";
echo $point_red->getColor() . "<br/>";
echo $point_red->lengthObject(new Point(5, 6));
$point = new Point(8, 10);
echo $point->lengthObject(new Point(2, 4)) . "<br/>";
<?php

/*ПРАКТИЧЕСКОЕ ПРИМЕНЕИЕ ИНКАПСУЛЯЦИИ*/
//Инкапсуляция - это свойство ООП позволяющее защитить и объединить данные и код в объект и скрыть реализацию объекта от пользователя.
//Модификатор доступа public - позволяет обращаться к свойствам и методам отовсюду.
//Модификатор доступа private - позволяет обращаться к свойствам и методам только внутри текущего класса.
//Модификатор доступа protected - позволяет обращаться к свойствам и методам только текущего класса и класса, который наследует свойства и методы текущего класса
//Лучше всего скрывать поля (свойства), а доступ давать к ним через методы
require_once getenv("DOCUMENT_ROOT") . "/lib/config.php";
require_once "Point.php";
$point = new Point();
//echo $point->length(5, 4);
//echo $point->x;
$point->setX(10);
$point->setY(-6);
echo $point->getX($x) . "<br/>";
echo $point->getY($y) . "<br/>";
echo $point->lengthObject(new Point(4, 9));