Основы ООП. Инкапсуляция

Практические задания

Краткое содержание лекции | Теоретические задания

Ниже приведены несколько задач. Вам следует применить инкапсуляцию и выполнить некоторые задания.

Задача 1.

(index.php) download
1
2
3
4
5
6
7
<?php
//code
$square = new Square();
$square->a = 10;
$square->b = 20;
printf('Square: %s' . \PHP_EOL, $this->calculateSquare());
printf('Is quadrate: %s' . \PHP_EOL, ($this->isQuadrate()) ? 'yes' : 'no');
(Square.php) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class Square
{
    /**
     * @var float
     */
    public $a = 0;

    /**
     * @var float
     */
    public $b = 0;

    public function calculateSquare()
    {
        return $this->a * $this->b;
    }

    public function isQuadrate()
    {
        return $this->a == $this->b;
    }
}

Задача 2.

К сожалению не пришла в голову аналогия из жизни к данной задаче, поэтому название классов и переменных - вымышленные. Просмотрите код внимательнее , тут есть над чем подумать.

(index.php) download
1
2
3
4
5
6
7
<?php
//code
$parent = new ParentClass();
$child = new Child();
$child->printData();
$child->d = 'string';
$child->printData();
(Child.php) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class Child extends ParentClass
{
    public $d = array();

    public function _printVars()
    {
        printf(
            '$a = %s; $b = %s; $c = %s; $d = %d;',
            $this->a, $this->b ? 'true' : 'false', $this->c, print_r($this->d, true)
        );
    }

    public function printData()
    {
        echo get_class() . \PHP_EOL;
        $this->_printVars();
        echo \PHP_EOL;
    }
}
(Parent.php) download
1
2
3
4
5
6
7
<?php
class ParentClass
{
    public $a = 0;
    public $b = true;
    public $c = 'string';
}