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

SlipKnot 16.07.2018 в 10:36

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

<?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 16.07.2018 в 15:18

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

public function getClass()

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

SlipKnot 17.07.2018 в 03:32

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

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

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

ivashkevich 17.07.2018 в 18:17

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

Galay 23.07.2018 в 14:55
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 23.07.2018 в 19:34

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

Galay 24.07.2018 в 07:29
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 24.07.2018 в 15:55

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

computerix 03.09.2018 в 12:31
<?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 05.09.2018 в 23:05

Отлично!

DmitryGavrilov 19.09.2018 в 14:27
<?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 22.09.2018 в 20:26

Супер!

Benya 28.09.2018 в 21:20
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 28.09.2018 в 23:16

Отлично =)

SBTesla 05.10.2018 в 10:41
<?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 06.10.2018 в 14:30

Супер!

ArtemijeKA 09.10.2018 в 06:19
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 12.10.2018 в 08:36

Отлично!

EWA 24.10.2018 в 21:01

Вроде так.

<?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 26.10.2018 в 08:53

Все ок

Protos 02.11.2018 в 03:01

$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 02.11.2018 в 07:41

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

AntonM99 04.11.2018 в 16:56
$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 04.11.2018 в 18:23

Отлично!

zebra 04.11.2018 в 20:09

Домашка :))

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 04.11.2018 в 20:14

Супер!

Todd 05.11.2018 в 00:49
$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 05.11.2018 в 09:17

Отлично!

stokato 06.11.2018 в 07:58

Познакомьтесь самостоятельно с функцией 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 08.11.2018 в 10:33

Отлично!

bildep 18.11.2018 в 15:32
<?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 19.11.2018 в 21:49

Отлично!

Waldemar 30.11.2018 в 02:55
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 30.11.2018 в 23:19

Отлично!

CarfikDK 17.12.2018 в 15:54

Домашка:

$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 17.12.2018 в 15:59

Отлично

alepawka 01.01.2019 в 16:52
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 01.01.2019 в 17:57

Отлично

landialog 02.01.2019 в 00:59

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 02.01.2019 в 21:04

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

Bogdan 04.01.2019 в 15:23

Дополните информацию об объекте, для которого считается площадь – пишите что это объект такого-то класса.
Для объектов, которые не реализуют интерфейс 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 05.01.2019 в 07:57

Отлично!

Bugaga159 02.02.2019 в 10:54
$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 03.02.2019 в 23:48

Ок!

excent63 03.02.2019 в 19:20
<?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 03.02.2019 в 23:49

Ок!

cap 25.02.2019 в 16:19
<?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 26.02.2019 в 09:35

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

Evgeny 10.03.2019 в 23:30

<?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 11.03.2019 в 21:22

Отлично

babls2332@gmail.com 17.03.2019 в 18:10
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 17.03.2019 в 23:57

Отлично

arhipow@mail.ru 19.03.2019 в 12:47
<?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 19.03.2019 в 23:27

Отлично

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

Отлично

Boodoo 10.04.2019 в 06:45
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 10.04.2019 в 15:21

Отлично

polvanovv 18.04.2019 в 07:48
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 18.04.2019 в 08:37

Отлично!

artemship 07.05.2019 в 11:04
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 10.05.2019 в 13:29

Отлично!

Dram 11.05.2019 в 09:37
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 11.05.2019 в 14:00

Отлично

Danya 03.06.2019 в 15:55

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

ivashkevich 03.06.2019 в 18:17

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

Danya 03.06.2019 в 20:39

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

ivashkevich 03.06.2019 в 20:51

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

Tina 09.06.2019 в 16:55

Домашка Урок: 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 09.06.2019 в 18:28

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

ashfedor 10.06.2019 в 20:34
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 11.06.2019 в 02:17

Отлично

rpash151 22.06.2019 в 18:58
<?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 23.06.2019 в 17:51

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

Moskva 03.07.2019 в 11:41
<?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 03.07.2019 в 11:56

Отлично!

Bizzzon 18.07.2019 в 22:51
<?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 19.07.2019 в 07:00

Супер!

Metey 19.07.2019 в 10:55
<?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 20.07.2019 в 14:37

Отлично

webdev 20.07.2019 в 15:39

ДЗ

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

Отлично

Reechniy 21.07.2019 в 16:08
<?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 21.07.2019 в 19:16

Отлично

Blook 31.07.2019 в 22:53
$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 01.08.2019 в 04:54

Отлично!

gruimed 05.08.2019 в 14:58
<?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 06.08.2019 в 20:10
  1. {get_class($object)} - так внутри строки не распарсится. Нельзя функции прямо там вызывать. Парится переменная $object, которую к строке привести не получается, вот и ругается. А вообще не надо использовать такой способ. Или используйте конкатенацию строк с кодом, либо используйте sprintf.
  2. Современный стандарт PSR диктует правило короткого синтаксиса
    $a = [1, 2];

    Вместо

    $a = array(1, 2);

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

gruimed 07.08.2019 в 13:11

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

fosfat 08.08.2019 в 21:00

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

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

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

ivashkevich 10.08.2019 в 06:47

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

khuurak 16.08.2019 в 17:15

$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 16.08.2019 в 20:38

Отлично

Pro100Bah 02.09.2019 в 12:32
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 02.09.2019 в 18:40

Отлично

Dreft 04.09.2019 в 21:09
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 04.09.2019 в 21:27

Отлично

XXX 23.09.2019 в 15:58
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 23.09.2019 в 20:48

имеет класс

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

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

prinzplanloser0514@gmail.com 29.09.2019 в 21:40
<?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 30.09.2019 в 00:38

Отлично

dliashchenko 09.10.2019 в 09:24
<?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 09.10.2019 в 19:24

Отлично

Evilinside 11.10.2019 в 16:59
<?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 11.10.2019 в 21:19

Супер!

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

Отлично

TheTigra 04.11.2019 в 17:01

Домашка:

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

Отлично

andreskrip 21.12.2019 в 18:58
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 21.12.2019 в 20:19

Отлично

EugeneGrigoryev 20.01.2020 в 10:26

Домашка:

<?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 20.01.2020 в 12:59

Отлично

YuraG 09.02.2020 в 10:53
Class Sphere
{
    const PI = 3.1416;

    private $r;

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

    public function calculateSquare(): float
    {
        return 4 * self:: PI * ($this->r ** 2);
    }
}
$objects = [
    $circle = new Circle(5),
    $rectangle = new Rectangle(2, 4),
    $square = new Square(5),
    $sphere = new Sphere(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 12.02.2020 в 12:26

Супер!

kvakazuabr 10.02.2020 в 20:55
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 12.02.2020 в 13:04

Отлично

OneMoreTime 16.02.2020 в 12:58

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

Домашнее задание легкое, чисто семантически все вроде пока просто и понятно. Но пример использования интерфейсов - чисто академический. Поэтому, хотелось бы каких-то практических жизненных примеров из реальных реализаций задач, как раз вот этих конкретных "зачастую", чтобы понимать - в каких задачах это уместно/необходимо, в каких - нет.

ivashkevich 18.02.2020 в 18:16

Примеры будут в дальнейшем

ChelovekAndrey 02.03.2020 в 00:18
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 05.03.2020 в 03:05

Отлично

Vilotu 21.03.2020 в 23:34
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
    {
        $pi = 3.1416;
        return self::PI * ($this->r ** 2);
    }
}

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

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

Отлично

webdev 23.03.2020 в 13:47

Очепятка :D
а также создадим у методы

ivashkevich 23.03.2020 в 14:17

Спасибо, исправил

Salexandr 31.03.2020 в 19:55
<?php
echo 'Интерфейсы <br>';

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

class Circle implements CalculateSquare
{
    const PI = 3.141592;
    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 Sqare implements CalculateSquare
{
    private $x;

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

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

$objects = [
    new Circle(5),
    new Rectangle(2, 4),
    new Sqare(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 01.04.2020 в 04:37

Отлично!

Dimitry 02.04.2020 в 06:09
<?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 02.04.2020 в 07:55

Супер!

Soib Patron 02.04.2020 в 22:50
<?php

interface СalculateSquare
{
    public function calculateSquare(): float;
}

class Rectangle implements СalculateSquare
{
    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 СalculateSquare
{
    private $x;

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

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

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

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

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

$obj = [
       new Rectangle(17,12),
       new Square(4),
       new Circle(10)
    ];

foreach ($obj as $item)
{
    $className = get_class($item);
    if ($item instanceof СalculateSquare)
    {
        echo "Объект клсаа $className реализует интерфейс CalculateSquare. Площадь: " . $item->calculateSquare() . "\n\r";
    }else
        echo "Объект клсаа $className не реализует интерфейс CalculateSquare.";
}
ivashkevich 03.04.2020 в 14:13

Отлично

leffalt@gmail.com 05.04.2020 в 15:07

Здравствуйте, уважаемый Артём!
Сразу предупрежу, поднял homestead на vagrant,там внутри работает php v7.4:
vagrant@homestead:~$ php --version
PHP 7.4.4 (cli) (built: Mar 20 2020 13:47:45) ( NTS ),

поэтому у всех свойств классов указаны модификаторы типа.
Так будет правильнее!

<?php

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

class Circle implements CalculateSquare
{
    const PI = 3.1416;

    private float $r;

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

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

class Rectangle
{
    private float $x;
    private float $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 float $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)
];

//var_dump($objects);
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 05.04.2020 в 19:25

Отлично! За типы свойств большой плюс! Нужно тоже доработать урок.

Dmitry.Dudin 06.04.2020 в 22:26
<?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 Rentagle 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->y*$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 Rentagle(2,4),
    new Circle(5)
    ];

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

    }
ivashkevich 07.04.2020 в 09:26

Отлично!

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

Отлично

gizbreht.e@yandex.ru 11.04.2020 в 10:58
$objects = [
  new Rectangle(3, 2),
  new Circle(5),
  new Square(4)
];

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

Отлично

Fill Patron 15.04.2020 в 18:40
<?php
//...

class HomeWork
{

}

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

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

Отлично)

Myakish 17.04.2020 в 12:01

Интерфейсы для склеротиков? Ведь если убрать проверку на интерфейс из цикла, то все площади посчитаются исправно. Вне зависимости продекларирована приверженность к интерфейсу или нет.
P.S. это конечно шутка юмора - видимо в больших или огромных проектах интерфейсы возможно полезны для унификации и стандартизации. Но тогда должны быть подходы (способы), строго декларирующие использование и сами решения?

stownm@mail.ru 17.04.2020 в 18:52

Возможно это развитие идеи абстрактных классов, ведь в PHP нельзя наследоваться от нескольких классов сразу, как в других языках, а указать несколько интерфейсов можно.

ivashkevich 17.04.2020 в 20:29

В том числе. Но в первую очередь - это гарантия реализации методов.

Timurik Patron 20.04.2020 в 10:33

вот что получилось:

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 20.04.2020 в 17:52

Отлично

studentDev Patron 24.04.2020 в 14:04

HomeWork:

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

RESULT:
Объект реализует интерфейс CalculateSquare. Площадь: 9 - это объект класса Square
Объект класса Rectangle не реализует интерфейс CalculateSquary!
Объект реализует интерфейс CalculateSquare. Площадь: 113.0976 - это объект класса Circle

ivashkevich 24.04.2020 в 14:32

Ок. Зачем только два раза код написали?)

kuvatov.eldar.slash24@gmail.com 27.04.2020 в 22:14
<?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 'Этот объект реализует интерфеёс Calculate. Объект класса '.get_class($object).'. Площадь: '. $object->calculateSquare().'.';
           echo '<br/>';
       } else {
            echo 'Объект класса '.get_class($object).' не реализует интерфейс CalculateSquare.';
            echo '<br/>';
       }
    }

get_class() - возвращает название класса, экземпляром которого является объект. Если переменная не ссылается на объект get_class() возвращает false. Начиная с версии PHP 7.2.0 объекту запрещено явно передавать значение NULL, это приведёт к ошибке уровня E_WARNING.
В ходе выполнения домашнего задания PHPStorm пожаловался на одну ошибку: Constant 'PI' not found in
Я так и не понял, как её решить, а так всё работает.

ivashkevich 28.04.2020 в 06:17

Всё отлично. Шторм скорее всего малость поехал крышей. Попробуй перезапустить его.

kuvatov.eldar.slash24@gmail.com 28.04.2020 в 10:04

Хорошо
Опять же спасибо вашим урокам! Если бы не вы, пользовался бы я устаревшим объявлением массива

titelivus 03.05.2020 в 19:05
<?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 03.05.2020 в 21:04

Отлично

tsaruk4356@gmail.com Patron 08.05.2020 в 19:43
<?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
{
    const PI = 3.1416;
    private $r;

    public function __construct(float $r)
    {
        $this->r = $r;
    }
    public function calculateSquare(): float
    {
        return self::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) {
    if ($object instanceof CalculateSquare) {
        echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare() . '. ' . 'Объект принадлежит классу ' . get_class($object) . '.' . '<br>';

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

Отлично

desperatik@mail.ru 16.05.2020 в 13:18

внесенные изменения

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'.'<br>';
    }
}

почему в примерах документации используются запятые, а не точка (echo "Меня зовут " , get_class($this) , "\n";)

ivashkevich 16.05.2020 в 14:07

Через точку происходит конкатенация строки. А конструкция echo поддерживает вывод значений, перечисленных через запятую

n.yurasheva 19.05.2020 в 00:20
<?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().'<br>';
    } else {
        echo 'Объект класса '. get_class ($object).'. Не реализует интерфейс CalculateSquare'.'<br>';
    }
}
ivashkevich 19.05.2020 в 06:12

Супер!

Sviatoslav Patron 20.05.2020 в 20:46

Мой пример

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 21.05.2020 в 07:09

Отлично

NR Patron 25.05.2020 в 01:21
$objects = [
    new Square(3),
    new Rectangle(2, 6),
    new Circle(3)
];

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

Отлично

IePyton Patron 27.05.2020 в 15:36
<?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(4, 5),
    new Circle(5)
];

var_dump($objects);

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.';
        echo '<br>';
    }

}
ivashkevich 27.05.2020 в 18:05

Отлично

sofya.prisyacheva@yandex.ru 06.06.2020 в 18:56
get_class ([ object $object ] ) : string
/*Возвращает имя класса, экземпляром которого является объект object.*/

Выполнила следующие пункты упражнения:

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

Если убрать из класса Circle упоминание о том, что он реализует этот интерфейс, то вывод следующий:
Объект реализует интерфейс CalculateSquare. Площадь: 25. Объект относится к классу: Square
Объект реализует интерфейс CalculateSquare. Площадь: 8. Объект относится к классу: Rectangle
Объект класса Circle не реализует интерфейс CalculateSquare.

ivashkevich 07.06.2020 в 13:00

Ок. А что с форматированием вдруг стало? Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

superbobr 11.06.2020 в 16:34
<?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 11.06.2020 в 20:32

Отлично

garetziro@gmail.com Patron 27.06.2020 в 12:25

Спасибо за урок!

foreach ($objects as $object){
    if($object instanceof CalculateSquare){
        echo 'Объект реализует метод CalculateSquare и его площадь равна: ' . $object->calculateSquare();
        echo '<br>';
        echo 'А, и еще он принадлежит к классу ' . get_class($object) . '.';
        echo '<br>';
    }
    else{
        ?>
<p style="color: red">Объект класса  <?= get_class($object)?>   не реализует интерфейс CalculateSquare.</p>
        <?php
    }
}
ivashkevich 27.06.2020 в 16:47

Отлично

ffaust1@yandex.ru 30.06.2020 в 11:55

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

Или пример не подходящий или же я ничего не понял.

ivashkevich 01.07.2020 в 18:15

Пример учебный, просто чтобы показать как интерфейсы работают. Практическое применение на более подходящих примерах будет рассмотрено далее по курсу.

Hellbound Patron вчера в 02:13
<?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. ';
        echo 'Класс объекта: ' . get_class($object);
        echo '. Площадь: ' . $object->calculateSquare();
        echo '<br>';
    } elseif (($object instanceof CalculateSquare ) != true) {
        echo 'Объект класса ' . get_class($object) . ' не реализует интерфейс CalculateSquare';
        echo '<br>';
    }
}
ivashkevich 22 часа назад
    } elseif (($object instanceof CalculateSquare ) != true) {

Во-первых, подобное условие стоит записывать как

    } elseif (!$object instanceof CalculateSquare) {

Ну а во-вторых, тут будет достаточно простого else без каких-либо дополнительных условий.

Логические задачи с собеседований