Чат Telegram
Группа ВКонтакте
Новый комментарий


SlipKnot

Фух, ну и пот. Вот вариант домашки:

<?php

interface CalculateSquare
{
    public function calculateSquare (): float;
}

class Circle implements CalculateSquare
{
    const PI = 3.1416;
    private $r;
    public function __construct(float $r)
    {
        $this->r = $r;
    }
    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}
class Restangle
{
    private $x;
    private $y;
    public function __construct (float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }
    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}
class Square implements CalculateSquare
{
    private $x;
    public function __construct(float $x)
    {
        $this->x = $x;
    }
    public function calculateSquare():float
    {
        return $this->x ** 2;
    }
}

$objects = [
    new Square(5),
    new Restangle (2,4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект класса ' . get_class($object) . ' реализует интерфейс CalculateSquare. Полщадь - ' . $object->calculateSquare();
        echo '<br>';
    } else {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare';
        echo '<br>';
    }
}
ivashkevich

Нормально, только

public function getClass()

не нужно нигде - оно ведь нигде не используется. К тому же вызов get_class() без аргумента приведет к ошибке. Поправьте, пожалуйста :)

SlipKnot

Пересмотрел код, участки вида:

public function getClass()
    {
        return get_class ();
    }

оказались бессмыслены, их нужно просто удалить. Отредактировал, проверьте пожалуйста. Спасибо за подсказку)

ivashkevich

Теперь отлично!
Не торопитесь и всё будет супер-пупер ;)

Galay
foreach ($object as $object) 
{
    if($object instanceof CalculateSquare)
    {
        $x = get_Class($object);
        echo "Объект принадлежи классу $x и реализует интерфейс CalculateSquare. Площадь: " . $object->calculateSquare();
        echo '<br>';
    } 
    else
    {
    $x = get_Class($object);
    echo "Объект класса $x не реализует интерфейс CalculateSquare";
    }

Как-то так.

ivashkevich

Разве работает?

Galay
interface CalculateSquare
    {
        public function calculateSquare(): float;
    }
class Circle implements CalculateSquare
    {
        const PI = 3.14;
        private $r;
        public function __construct(float $r)
        {
            $this->r = $r;
        }
        public function calculateSquare(): float{

            return self::PI * ($this->r ** 2);
        }

    }
class Rectangle implements CalculateSquare
    {
        private $x;
        private $y;
        public function __construct(float $x, float $y)
        {
            $this->x = $x;
            $this->y = $y;
        }
        public function calculateSquare(): float
        {
            return $this->x * $this->y;
        }

    }
class Scuare implements CalculateSquare
    {
        private $x;
        public function __construct(float $x)
        {
            $this->x = $x;
                    }
        public function calculateSquare(): float
        {
            return $this->x ** 2;
        }

    }
class Cat 
    {
        private $name;
        private $color;
        public function __construct(string $name, string $color){
            $this->name = $name;
            $this->color = $color;
        }

        public function sayHello() {
            echo "Привет, меня зовут {$this->name}, мой цвет - $this->color.";
        }
        public function getColor(): string {
            return $this->color;
        }
        public function setColor(string $color) {
             $this->color = $color;
        }
    }
$object = 
    [
    new Scuare(5),
    new Rectangle(5, 3),
    new Circle(3),
    new Cat('Барсик','Белый')
    ];

foreach ($object as $object) 
{
    if($object instanceof CalculateSquare)
    {
        $x = get_Class($object);
        echo "Объект принадлежи классу $x и реализует интерфейс CalculateSquare. Площадь: " . $object->calculateSquare();
        echo '<br>';
    } 
    else
    {
    $x = get_Class($object);
    echo "Объект класса $x не реализует интерфейс CalculateSquare";
    }
}

Ну вот так работает. Я просто выложил только домашку, без кода скопированного из урока.

ivashkevich

Да нет, это я понял. Странно что работает функция get_Class - это видимо какой-то баг в PHP. Нужно использовать get_class - все в нижнем регистре.

computerix
<?php

interface CalculateSquare
{
    public function calculateSquare(): float;
}

class Circle implements CalculateSquare
{
    const PI = 3.1416;

    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

class Rectangle implements CalculateSquare
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Относится к классу' .get_class($object) . 'Площадь: ' . $object->calculateSquare();
        echo '<br>';
    }
    else {'Объект класса' .get_class($object) . 'не реализует интерфейс CalculateSquare.'};
}
?>
ivashkevich

Отлично!

DmitryGavrilov
<?php

interface calculateSquare
{

    public function calculateSquare(): float;
}

class Rectangle
{

    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements calculateSquare
{

    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }

}

class Circle implements calculateSquare
{

    const PI = 3.1416;

    private $r;

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

    public function calculateSquare(): float
    {

        return self::PI * $this->r ^ 2;

    }

}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof calculateSquare) {
        echo 'Объект реализует интерфейс calculateSquare. Площадь: ' . $object->calculateSquare();
        echo '<br>';
        echo 'Это объект класса: ' . get_class($object);
        echo '<br>';
    } else {
        echo 'Объект класса ' . get_class($object) . ' ' . 'не реализует интерфейс calculateSquare';
    }

}
ivashkevich

Супер!

Benya
foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
        echo '<br>';
        echo 'Этот объект' . get_class($object) . ' класса.' . '<br>';
    } else {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare.';
    }
}
ivashkevich

Отлично =)

SBTesla
<?php

interface CalculateSquare {
     public function calculateSquare():float ;
}

class Rectangle  implements CalculateSquare {
     private $x;
     private $y;

     public function __construct(float  $x, float $y)
     {
          $this->x = $x;
          $this->y = $y;
     }

     public function calculateSquare (): float {

          return $this->x * $this->y;
     }
}

class Square  implements CalculateSquare {
     private $x;

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

     public function calculateSquare():float
     {
          return $this->x ** 2;
     }
}

class Circle implements CalculateSquare {
     const PI = 3.1416;
     private $r;

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

     public function calculateSquare(): float
     {
          return self::PI * ($this->r ** 2);
     }
}

$objects = [
      new Square(5),
     new Rectangle(2,4),
     new Circle(5)
];

foreach ($objects as $object) {
     if ($object instanceof CalculateSquare) {
          echo 'Обьект класса '. get_class($object).' реализует интерфейс CalculateSquare. Площадь:' . $object->calculateSquare();
          echo '<br>';
     }  else {
          echo 'Обьект класса' . get_class($object) . ' не реализует интерфейс CalculateSquare';
          echo '<br>';
     }
}
ivashkevich

Супер!

ArtemijeKA
foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект "' . get_class($object) . '" реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
        echo '<br>';
    } else {
        echo 'Объект класса "' . get_class($object) . '" не реализует интерфейс CalculateSquare.';
        echo '<br>';
    }
}
ivashkevich

Отлично!

EWA

Вроде так.

<?php
interface CalculateSquare
{
public function calculateSquare(): float;
}
class Circle implements CalculateSquare
{
const PI = 3.1416;
private $r;

public function __construct(float $r)
{
$this->r = $r;
}
public function calculateSquare(): float
{
return self::PI * ($this->r ** 2);
}
}
class Rectangle
{
private $x;
private $y;
public function __construct(float $x, float $y)
{
$this->x = $x;
$this->y = $y;
}
public function calculateSquare(): float
{
return $this->x * $this->y;
}
}
class Square implements CalculateSquare
{
private $x;

public function __construct(float $x)
{
$this->x = $x;
}
public function calculateSquare(): float
{
return $this->x ** 2;
}
}
$objects = [
new Square(5),
new Rectangle(2, 4),
new Circle(5)
];
foreach ($objects as $object) {
if ($object instanceof CalculateSquare) {
echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . ' и является объектом класса ' . get_class($object);
echo '<br>';
}else{
echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquar.';
echo '<br>';
}
}
ivashkevich

Все ок

Protos

$objects = [
    new Square(5),
    new Rectangle(2,4),
    new Circle(9)
];

foreach ($objects as $object){
    if ($object instanceof CalcSquare){
        echo 'Объект реализует интерфейс CalcSquare. И принадлежит к классу ' . get_class($object) . PHP_EOL ;

    }
    else {
        echo 'Объект НЕ РЕАЛИЗУЕТ интерфейс CalcSquare. И принадлежит к классу ' . get_class($object) . PHP_EOL ;
    }
}
ivashkevich

Хорошо, только не стоило убирать расчет площади.

AntonM99
$objects =[
    new Square(5),
    new Rectangle(2,4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерефейс CalculateSquare. Это объект класса ' . get_class($object) . '.' . ' Площадь: ' . $object->calculateSquare();
        echo '<br>';
    } else {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare';
        echo '<br>';
    }
}
ivashkevich

Отлично!

zebra

Домашка :))

class Rectangle
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

interface CalculateSquare
{
    public function calculateSquare(): float;
}

class Circle implements CalculateSquare
{
    const PI = 3.1416;

    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2); //self - обращение к текущему классу
    }
}

//$circle1 = new Circle(2.5);
// var_dump($circle1 instanceof CalculateSquare); //instanceof - проверяет является ли экзэпляром какого-либо класса, либо реализует какого-либо интерфейс
//get_class  Возвращает имя класса к которому принадлежит объект

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

//var_dump($objects);
//echo (get_class($objects[0]));
//echo '<br>';

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . ' и это объект класса ' . get_class($object);
        echo '<br>';
    }
    else {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare. ';
        echo '<br>';
    }
}
ivashkevich

Супер!

Todd
$objects = [
    new Rectangle(2, 4),
    new Square(5),
    new Circle(5),
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . '<br>';
        echo 'Этот объекст относится к кассу ' . get_class($object) . '<br><br>';
    } else {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare <br><br>';
    }
}
ivashkevich

Отлично!

demyanovpaul@yandex.ru

Познакомьтесь самостоятельно с функцией get_class().
Дополните информацию об объекте, для которого считается площадь – пишите что это объект такого-то класса.
Для объектов, которые не реализуют интерфейс CalculateSquare пишите:
Объект класса ТУТ_НАЗВАНИЕ_КЛАССА не реализует интерфейс CalculateSquare.

interface CalculateSquare
{
    public function calculateSquare(): float;
}

class Rectangle implements CalculateSquare
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square 
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

class Circle implements CalculateSquare
{
    private $r;

    const PI = 3.1416;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект ' . get_class($object) . ' реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
        echo '<br>';
    }
    else{
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
        echo '<br>';
    }
}
ivashkevich

Отлично!

bildep
<?php

interface CalculateSquare
{
    public function calculateSquare(): float;
}

class Circle implements CalculateSquare
{
    const PI = 3.1416;

    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

class Rectangle
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект класса ' . get_class($object) . ' реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
        echo '<br>';
    } else {
        echo 'Объект класса ' . get_class($object) .' не реализует интерфейс CalculateSquare';
        echo '<br>';
    }
}
ivashkevich

Отлично!

Waldemar
foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . '. Этот объект класса ' . get_class($object);
        echo '<br>';
    } else {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare.' . '<br>';
    }
ivashkevich

Отлично!

lordbear53@gmail.com

Домашка:

$objects = [
  new Square(5),
  new Rectangle(2, 4),
  new Circle(5)
];

foreach ($objects as $object) {
    if( $object instanceof CalculateSquare ) {
        echo 'Объект реализует интерфейс CalculateSquare. Прощадь: ' . $object->calculateSquare() . '<br> Этот объект класса: ' . get_class($object);
        echo '<br>';
    } else {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare';
        echo '<br>';
    }
}
ivashkevich

Отлично

alepawka
foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . ', а его класс: ' . get_class($object);
        echo '<br>';
    }
    else 
    {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare';
        echo '<br>';
    }
}
ivashkevich

Отлично

landialog

interface CalculateSquare
{
    public function calculateSquare();
}

class Circle implements CalculateSquare
{
    const PI = 3.14;
    private $r;

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

    public function calculateSquare()
    {
        return self::PI * ($this->r ** 2);
    }
}

class Rectangle implements CalculateSquare
{
    private $a;
    private $b;

    public function __construct($a, $b)

    {
        $this->a = $a;
        $this->b = $b;
    }

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

class Square implements CalculateSquare
{
    private $a;

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

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

$all = [
    new Circle(7),
    new Square(4),
    new Rectangle(4, 3)
];

foreach ($all as $value) {

    if ($value instanceof CalculateSquare) {
        echo '<p> Площадь равна = ' . $value->calculateSquare() . 'Это объект класса - ' . get_class($value);
    } else {
        echo 'Объект класса' . get_class($value) . 'не реализует интерфейс CalculateSquare';
    }
}

Вопрос по поводу типизации данных. PhpStorm выдает ошибку если указывать эту строгую типизацию.
Насколько это грозит последствиями если ее не указывать?
P.S. Новое для себя открыл, крутое выражение возведение в степень **2.

ivashkevich

По коду - ок. Шторм правильно всё говорит, если ожидаете целочисленное, то и передавать нужно целочисленное. Лучше сейчас использовать strict_types=1 уже.

Bogdan

Дополните информацию об объекте, для которого считается площадь – пишите что это объект такого-то класса.
Для объектов, которые не реализуют интерфейс CalculateSquare пишите:
Объект класса ТУТ_НАЗВАНИЕ_КЛАССА не реализует интерфейс CalculateSquare.

foreach ($objects as $key => $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() .
            ', это объект ' . get_class($objects[$key]) . ' класса.';
        echo '<br>';
    } else {
        echo 'Объект класса ' . get_class($objects[$key]) . ' не реализует интерфейс CalculateSquare.';
    }
}
ivashkevich

Отлично!

Bugaga159
$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект '. get_class($object) .' реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . '<br>';
    }else{
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare <br>';
    }
}
ivashkevich

Ок!

excent63
<?php
interface CalculateSquare
{
    public function calculateSquare(): float;
}
class Rectangle implements CalculateSquare
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }
    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}
class Square
{
    private $x;

    public function __construct(float $x)
    {
        $this->x = $x;
    }
    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}
class Circle implements CalculateSquare

{
    const PI = M_PI;

    private $r;

    public function __construct(float $r)
    {
        $this->r = $r;
    }
    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . '. ';
        echo 'Это объект класса '. get_class($object). '.';
        echo '<br>';
    }else {
        echo get_class($object) . ' не реализует интерфейс CalculateSquare';
        echo '<br>';
    }
}
ivashkevich

Ок!

arturshopengauer@mail.ru
<?php

interface CalculateSquare
{
    public function calculateSquare(): float;

}

interface ClassName
{
    public function className() ;
}

class Circle implements CalculateSquare, ClassName
{
    const PI = 3.1416;

    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }

    public function className()
    {
        return get_class($this);
    }
}

class Rectangle implements ClassName
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }

    public function className()
    {
        return get_class($this);
    }
}

class Square implements CalculateSquare, ClassName
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }

    public function className()
    {
        return get_class($this);
    }
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. 
        Площадь: ' . $object->calculateSquare() . '.' .' Объект реализует класс: '. $object->className() . '.';
        echo '<br>';
    }else{
        echo 'Объект <b>НЕ</b> реализует интерфейс CalculateSquare.' .' Объект реализует класс: '.
            $object->className() . '.';
        echo '<br>';
    }
}
//конечно, тут сожно и без interface ClassName, но этож тема про интерфейсы
ivashkevich

По самому заданию - всё сделано хорошо. Только метод className() у вас везде одинаковый, да и в общем-то лишний. Но хорошо, что вы разобрались как это в целом работает :)

Evgeny

<?php

interface CalculateSquare
{

    public function calculateSquare(): float;

}

class Circle implements CalculateSquare
{
    private const PI = 3.1416;
    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

class Rectangle implements CalculateSquare
{

    protected $x;
    protected $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements CalculateSquare
{

    protected $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

$objects = [
    new Circle(24.65),
    new Rectangle(15.7, 27.25),
    new Square(25.5),
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект класса ' . get_class($object) . ' реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
        echo '<br>';
    } else {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare.';
        echo '<br>';
    }
}
ivashkevich

Отлично

babls2332@gmail.com
foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . ' Это объект класса ' . get_class($object);
        echo '<br>';
    } else {
        echo "Объект класса " . get_class($object) . " не реализует интерфейс CalculateSquare.<br>";
    }
}
ivashkevich

Отлично

arhipow@mail.ru
<?php

interface CalculateSquare
{
    public function calculateSquare(): float;
}

class Circle implements CalculateSquare
{
    const PI = 3.1416;

    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

class Rectangle
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . ', это объект класса ' . get_class($object);
        echo '<br>';
    } else {

        echo 'Объект класса ' .  get_class($object) . ' не реализует интерфейс CalculateSquare ' . ' Площадь: ' . $object->calculateSquare() . ', это объект класса ' . get_class($object);
        echo '<br>';

    }
}
ivashkevich

Отлично

Grewi
foreach ($objects as $object){
    if($object instanceof CalculateSquare){
        echo 'Объект  '.get_class($object).' реализует CalculateSquare. Площадь: '. $object->calculateSquare().'</br>';
    }else{
        echo 'Объект '.get_class($object).' не реализует CalculateSquare. </br>';
    }
}
ivashkevich

Отлично

Boodoo
foreach($objects as $object) {
        if($object instanceof CalculateSquare) {
            echo 'Класс объекта ' . get_class($object) . '.';
            echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
            echo '<br>';
        } else {
            echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare.';
            echo '<br>';
        }
    }
ivashkevich

Отлично

polvanovv
interface CalculeteSquare
{
    public function calculateSquare(): float;
}
class  Rectangle implements CalculeteSquare
{
    private $x;
    private $y;

    public function __construct(float $x,float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements CalculeteSquare
{
    private $x;

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

    public function calculateSquare():float
    {
        return $this->x **2;
    }
}

class  Circle
{
    const PI = 3.1416;
    private $r;

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

    public function calculateSquare():float
    {

        return self::PI * ($this->r ** 2);
    }

    public function getR(): float
    {
        return $this->r;
    }
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object){
    if ($object instanceof CalculeteSquare){
        echo 'Обьект класса ' .get_class($object) . ' реализует интерфейс CalculateSqure. Площадь: ' . $object->calculateSquare();
        echo '<br>';
    }else {
        echo 'Обьект класса ' . get_class($object) . ' не реализует интерфейс CalculateSqure.';
        echo '<br>';
    }
}
ivashkevich

Отлично!

artemship
foreach ($objects as $object) {
    if (!$object instanceof CalculateSquare) {
        echo 'Объект класса '
            . get_class($object)
            . ' не реализует интерфейс CalculateSquare';
        echo '<br>';
    } else {
        echo 'Объект класса '
            . get_class($object)
            . ' реализует интерфейс CalculateSquare. Его площадь: '
            . $object->calculateSquare();
        echo '<br>';
    }
}
ivashkevich

Отлично!

Dram
foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . ' и относится к классу ' . get_class($object);
        echo '<br>';
    } else{
        echo 'Объект класса '. get_class($object) .' не реализует интерфейс CalculateSquare.';
        echo '<br>';
    }
}
ivashkevich

Отлично

Danya

Я правильно полял , что интерфейс просто обязывает класс, реализующий интерфейс, содержать определенные методы , описаные в интерфейсе. Типа как конструктор , который обязывает дать имя котику (как пример в прошлых уроках)

ivashkevich

Всё верно описали, но аналогия с конструктором лишняя, не очень подходящий пример.

Danya

"Через интерфейс мы можем изменять внутреннее состояние объекта, добиться от него каких-то действий, или получить от него что-то." - это определение из раздела "Объектно-ориентированный подход в PHP" который идет чуть позже , очень сильно облегчил понимание))

ivashkevich

Там под интерфейсом подразумевается просто набор публичных методов. Не то, что здесь описывается с помощью слова interface :)

Tina

Домашка Урок: 4 (Интерфейсы)

<?php
interface CalculateSquare
{
    public function calculateSquare(): float;
}
//Прямоугольник
//class Rectangle implements CalculateSquare
class Rectangle
{
    private $x;
    private $y;
    //добавила свойство name для понимания при выводе о какой фигуре идет речь
    public $name;

    public function __construct($x, $y, string $name)
    {
        $this->x = $x;
        $this->y = $y;
        $this->name = $name;
    }

    public function calculateSquare():float
    {
        return $this->x * $this->y;
    }
}

//Квадрат
class Square implements CalculateSquare
{
    private $x;
    public $name;

    public function __construct(float $x, string $name)
    {
        $this->x = $x;
        $this->name = $name;
    }

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

//Круг
class Circle implements CalculateSquare
{
    const PI = 3.1416;
    private $r;
    public $name;

    public function __construct(float $r, string $name)
    {
        $this->r = $r;
        $this->name = $name;
    }

    public function calculateSquare(): float
    {
        $pi = 3.1416;
        return $pi * ($this->r ** 2);
    }
}

$objects = [
    new Square(5, 'Квадрат'),
    new Rectangle(2, 4, 'Прямоугольник'),
    new Circle(5, 'Круг')
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект ' . $object->name . ' класса ' .get_class($object) . ' реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
        echo '<br>';
    } else {
       echo 'Объект ' . $object->name . ' класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
       echo '<br>';
    }
}
$circle1 = new Circle(2.5, '');
var_dump($circle1 instanceof Circle);
ivashkevich

А почему это свойство public?

ashfedor
foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект ' , get_class($object) , ' реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
        echo '<br>';
    }else{
        echo 'Объект ' , get_class($object) , ' не реализует интерфейс CalculateSquare.' . '<br>';
    }
}
ivashkevich

Отлично

rpash151
<?php

interface CalculateSquare
{
    public function calculateSquare(): float;
}

class Rectangle implements CalculateSquare
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

class Circle
{
    const PI = 3.1416;
    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(2.5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
        echo ' Это объект класса:'.get_class($object);
        echo '<br>';
    }
    else
        {
            echo 'Объект класса '.get_class($object).' не реализует интерфейс CalculateSquare';
        }
}
ivashkevich

Отлично. Только отступы после else поехали. Для формирования кода используйте кнопку в редакторе комментариев, слева вверху.

Moskva
<?php

interface CalculateSquare{
    public function calculateSquare():float;
}

class Rectangle{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x= $x;
        $this->y= $y;
    }

    public function calculateSquare():float{
        return $this->x*$this->y;
    }
}

class Square implements CalculateSquare {
    private $x;

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

    public function calculateSquare():float{
        return $this->x ** 2;
    }
}

class Circle implements CalculateSquare {
    const PI = 3.1416;
    private $r;

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

    public function calculateSquare():float{//Для того, чтобы обратиться к константе, нужно использовать конструкцию self::ИМЯ_КОНСТАНТЫ,
        return self::PI * ($this->r ** 2);//или ИмяКласса::ИМЯ_КОНСТАНТЫ. Ключевое слово self – это обращение к текущему классу
    }
}

$objects = [
    new Square(5),
    new Rectangle(2,4),
    new Circle(5)
];

foreach ($objects as $object){
    if ($object instanceof  CalculateSquare){
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . '. Класс ' . get_class($object);
        echo '<br>';
    }
    else {
       echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare.';
        echo '<br>';
    }
}
ivashkevich

Отлично!

Bizzzon
<?php

interface CalculateSquare
{
    public function calculateSquare(): float;
}

class Circle implements CalculateSquare
{
    const PI = 3.1416;

    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

class Rectangle implements CalculateSquare
{
    private $x;
    private $y;
    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }

}

class Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . ' ' .  'Класс объекта:' . ' ' .get_class($object);
        echo '<br>';
    } else {
       echo 'Объект класса' .get_class($object) . ' ' . 'не реализует интерфейс CalculateSquare.';
    }
}
ivashkevich

Супер!

Metey
<?php

interface CalculateSquare
{
    public function calculateSquare(): float;
}

class Circle implements CalculateSquare
{
    const PI = 3.1416;

    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

class Rectangle
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . 
        $object->calculateSquare() . ' и принадлежит к классу ' . get_class ($object);
        echo '<br>';
    }
    else {
        echo 'Объект класса ' . get_class ($object) . ' не реализует интерфейс CalculateSquare';
        echo '<br>'; 
    }
}
ivashkevich

Отлично

webdev

ДЗ

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare класса '.get_class($object).' Площадь: ' . $object->calculateSquare();
        echo '<br>';
    }else{
        echo 'Объект класса '.get_class($object).' не реализует интерфейс CalculateSquare.';
    }
}
ivashkevich

Отлично

Reechniy
<?php

interface CalculateSquare
{
    public function calculateSquare(): float;
}

class Rectangle implements CalculateSquare
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x*$this->y;
    }
}

class  Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

class Circle implements CalculateSquare
{
    const PI = 3.1416;

    private $r;

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

    public function calculateSquare(): float
    {
             return self::PI * ($this->r ** 2);
    }
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];
foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект класса ' . get_class($object) . ' реализуется интерфейс CalculationSquare. Площадь: ' . $object->calculateSquare();
        echo '<br>';
    }else {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculationSquare';
        echo '<br>';
    }
    }
ivashkevich

Отлично

Blook
$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект класса ' . get_class($object) .', реализующего интерфейс Calculate Square. Площадь:' . $object->calculateSquare();
        echo '<br>';
    } else  {
        echo 'Класс ' . get_class($object) . ' не реализует интерфейс CalculateSquare';
        echo '<br>';
    }
}
ivashkevich

Отлично!

gruimed
<?php

class Rectangle implements CalculateSquare
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

class Circle
{
    const PI = 3.1416;

    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

$circle1 = new Circle(2.5);
//var_dump($circle1 instanceof CalculateSquare);

interface CalculateSquare
{
    public function calculateSquare(): float;
}

$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Object of class ' . get_class($object) . ' implements an Interface. Square is: ' . $object->calculateSquare() . "\n";
    } else {
        echo 'Object of class ' . get_class($object). ' doesn\'t implements an Interface. Square is: ' . $object->calculateSquare() . "\n";
    }
}

Есть несколько вопросов:
1) почему я не могу использовать для вывода конструкцию

echo "Object of class {get_class($object)} implements an Interface. Square is: {$object->calculateSquare()} \n";

Выдает ошибку

Recoverable fatal error: Object of class Square could not be converted to string 

при этом при проверке

echo gettype(get_class($object));

выдает string

2) При создании массива $objects используем []. Я чаще наблюдала массивы в (), и PHPStorm тоже создает с круглыми скобками. В чем разница и какие аргументы есть при выборе?

ivashkevich
  1. {get_class($object)} - так внутри строки не распарсится. Нельзя функции прямо там вызывать. Парится переменная $object, которую к строке привести не получается, вот и ругается. А вообще не надо использовать такой способ. Или используйте конкатенацию строк с кодом, либо используйте sprintf.
  2. Современный стандарт PSR диктует правило короткого синтаксиса
    $a = [1, 2];

    Вместо

    $a = array(1, 2);

    Второй вариант считается устаревшим.

gruimed

Поняла, спасибо!

fosfat

У вас опечатка в разделе "Интерфейсы":

"Окей, разобрались с константами и имеем в итоге 3 объекта, описывающих геометрические фигуры и реализацию для вычисления их площадей."

Вместо "3 объекта" - "3 класса".

ivashkevich

Отличное замечание, спасибо!

khuurak

$objects = [
    new Rectangle(2, 5),
    new Square(3),
    new Circle(4)
];

foreach($objects as $object) {
    if($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare в классе '.get_class($object).'. Площадь: '.$object->calculateSquare();
        echo '<br>';
    } else {
        echo 'Объект класса '.get_class($object).' не реализует интерфейс CalculateSquare.';
        echo '<br>';
    }
}
ivashkevich

Отлично

Pro100Bah
interface CalculateSquare
{
    public function calculateSquare(): float ;
}

class Rectangle
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

class Circle implements CalculateSquare
{
    const PI =  3.1416;

    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

$objects = [
new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
    ];

foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
        echo '<br>';
    } else {                                                                                    //homework4
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare.'; //get_class — Возвращает имя класса, к которому принадлежит объект
        echo '<br>';                                                                            //homework4
    }
}
ivashkevich

Отлично

Dreft
foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . ' Это объект класса ' . get_class($object); "<br>";
        echo '<br>';
    } else {
        echo 'Объект класса ' . get_class($object) . ' не реализует объект CalculateSquare' . '<br>';
    }
}
ivashkevich

Отлично

XXX
foreach ($objects as $object) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare и имеет класс: ' . get_class($object) . '.' . ' Площадь: ' . $object->calculateSquare();
        echo '<br>';
    } else {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare.';
        echo '<br>';
    }
}
ivashkevich

имеет класс

является объектом класса

В остальном - отлично

prinzplanloser0514@gmail.com
<?php

class Rectangle
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    public function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

class Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

class Circle implements CalculateSquare
{
    private $r;

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

    public function calculateSquare(): float
    {
        $pi = 3.1416;
        return $pi * ($this->r ** 2);
    }
}

interface CalculateSquare
{
    public function calculateSquare(): float;
}
$objects = [
    new Square(5),
    new Rectangle(2, 4),
    new Circle(5)
];

foreach ($objects as $object) {
    $name = get_class($object);
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . ' Меня зовут ' . $name;
        echo '<br>';
    } else
        echo $name . ' не реализует интерфейс CalculateSquare' . '<br>';

}
ivashkevich

Отлично

dliashchenko
<?php
interface CalculateSquare
{
    public function calculateSquare(): float;
}

class Square implements CalculateSquare
{
    private $x;
    public function __construct(float $x)
    {
        $this->x = $x;
    }
    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

class Rectangle
{
    private $x;
    private $y;
    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }
    public function calculateSquare():float
    {
        return $this->x * $this->y;
    }
}

class Circle implements CalculateSquare
{
    const PI = 3.1416;
    private $r;
    public function __construct(float $r)
    {
        $this->r = $r;
    }
    public function calculateSquare():float
    {
        return self::PI ** ($this->r ** 2);
    }
}

$objects = [
    new Circle(3),
    new Rectangle(2.3, 5.3),
    new Square(4.5)
];
foreach($objects as $object){
    if ($object instanceof CalculateSquare){
        echo 'Объект класса ' . get_class($object) . ' реализует интерфейс CalculateSquare' . '<br/>';
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . '<br/>' ;
        echo '<br/>';

    } else{
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare' . '<br/>';
        echo '<br/>';
    }
}
ivashkevich

Отлично

Evilinside
<?php

interface CalculateSquare
{
    function calculateSquare(): float;
}

//Класс прямоугольник
class Rectangle implements CalculateSquare
{
    private $x;
    private $y;

    public function __construct(float $x, float $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    function calculateSquare(): float
    {
        return $this->x * $this->y;
    }
}

//Класс квадрат
class Square implements CalculateSquare
{
    private $x;

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

    public function calculateSquare(): float
    {
        return $this->x ** 2;
    }
}

//Класс круг
class Circle implements CalculateSquare
{
    const PI = 3.1416;
    private $r;

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

    public function calculateSquare(): float
    {
        return self::PI * ($this->r ** 2);
    }
}

//Создадим класс треугольник, который не реализует интерфейс CalculateSquare
class RightTriangle
{
    private $a;
    private $b;

    public function __construct(float $a, float $b)
    {
        $this->a = $a;
        $this->b = $b;
    }

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

$objects = [
    new Rectangle(3, 2),
    new Square(2),
    new Circle(5),
    new RightTriangle(2,3)
];
foreach ($objects as $object) {

    if ($object instanceof CalculateSquare) {
        echo "Объект " . get_class($object) . ' реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . "\n";

    } elseif ($object instanceof CalculateSquare == false) {
        echo "Объект класса " . get_class($object) . " не реализует интерфейс CalculateSquare.";

    }

}
ivashkevich

Супер!

Курс программирования на PHP
Подготовка до уровня устройства на работу!
Начать бесплатно
Логические задачи с собеседований