Чат 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

Отлично!

demyanovpaul@yandex.ru 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

Отлично

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