Этот урок набрал набрал достаточно большое количество комментариев и дальнейшее его комментирование отключено. Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку, посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали. Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
Galay 24.07.2018 в 13:03
abstract class HumanAbstract
{
    private $name;
    public function __construct(string $name)
    {
        $this->name = $name;
    }
    public function getName(): string
    {
        return $this->name;
    }
    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{

     public function getGreetings(): string
     {
        return  'Привет';
     }
     public function getMyNameIs(): string
     {
        return    'Меня зовут';
     }
}
class EnglishHuman extends HumanAbstract
{
     public function getGreetings(): string
     {
        return  'Hi';
     }
     public function getMyNameIs(): string
     {
        return  'My name is';
     }
}

$russian = new RussianHuman('Иван');

$english = new EnglishHuman('John');

echo $russian->introduceYourself();
echo '<br>';
echo $english->introduceYourself();

echo '<br>';
echo '<hr>';

Разобрался

ivashkevich 24.07.2018 в 16:00

Всё так, методы возвращают строки, нужно их просто вывести:

echo $russian->introduceYourself();
echo $english->introduceYourself();

А так - всё отлично!

Galay 24.07.2018 в 16:03

Да, спасибо, разобрался.

Ilon 01.08.2018 в 13:56
<?php

    abstract class HumanAbstract{

        protected $name;

        public function __construct($name){
            $this->name = $name;
        }
        public function getName(){
            return $this->name;
        }

        abstract public function getGreetings();
        abstract public function getMyNameIs();

        public function introduceYourself(){
            return $this->getGreetings()." ! ".$this->getMyNameIs()." ".$this->getName()." .";
        }
    }

    class RussianHuman extends HumanAbstract{
        public function getGreetings(){
            return "Привет";
        }
        public function getMyNameIs(){
            return "Меня зовут ";
        }
    }

    class EnglishHuman extends HumanAbstract{
        public function getGreetings(){
            return "Hello ";
        }
        public function getMyNameIs(){
            return "My name is ";
        }
    }

    $russian = new RussianHuman("Амир");
    $english = new EnglishHuman("Amir");

    echo $russian->introduceYourself()."<br>";
    echo $english->introduceYourself()."<br>";
ivashkevich 03.08.2018 в 15:37

Хорошо.

computerix 04.09.2018 в 12:46
<?
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}
class RussianHuman extends HumanAbstract
{
    private $name;
    public function __construct(string $name)
    {
        $this->name = $name;
    }
    public function getMyNameIs(): string
    {
         return 'Меня зовут';
    }
    public function getGreetings(): string
 {
     return 'Привет';
 }
}
class EnglishHuman extends HumanAbstract
{
    private $name;
    public function __construct(string $name)
    {
        $this->name = $name;
    }
    public function getMyNameIs(): string
    {
         return 'My name is';
    }
    public function getGreetings(): string  
 {
     return 'Hi';
 }  
}
$rus = new RussianHuman('Иван');
$rus->introduceYourself();
$en = new EnglishHuman('Bob');
$en->introduceYourself();
?>
ivashkevich 05.09.2018 в 23:42

Всё ок, только стоит echo добавить перед $rus->introduceYourself();

Benya 30.09.2018 в 14:11
class UkraineHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет. ';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут ';
    }

}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hi. ';
    }

    public function getMyNameIs(): string
    {
        return 'My name is ';
    }
}

$ukr = new UkraineHuman('Микола');
$eng = new EnglishHuman('Nikolay');

echo $ukr->introduceYourself();
echo $eng->introduceYourself();
ivashkevich 02.10.2018 в 21:41

А где метод introduceYourself?

DmitryGavrilov 02.10.2018 в 10:44
<?php

abstract class HumanAbstract
{

    private $name;

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

    public function getName(): string
    {

        return $this->name;

    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {

        return $this->getGreetings() . '! ' . $this->getMyNameis() . ' ' . $this->getName() . '.';

    }

}

class RussianMan extends HumanAbstract
{

    public function getGreetings(): string
    {

        return 'Здравствуйте';

    }

    public function getMyNameIs(): string
    {

        return 'Имя моё - ';

    }

}

class EnglishMan extends HumanAbstract
{

    public function getGreetings(): string
    {

        return ' Hello my friend';

    }

    public function getMyNameIs(): string
    {

        return 'The name of mine is - ';

    }

}

$Russia = new russianMan('Петр Первый');
echo '<br>';
$England = new englishMan('Benedict Camberbatch, as you know');

echo $Russia->introduceYourself();
echo $England->introduceYourself();
ivashkevich 02.10.2018 в 21:41

Отлично

SBTesla 06.10.2018 в 10:37
<?php
abstract class HumanAbstract {
     private $name;
     public function __construct($name)
     {
          $this->name = $name;
     }
     public function getName()
     {
          return $this->name;
     }

     abstract public function getGreetings(): string ;
     abstract public function getMyNameIS(): string ;

     public function introduceYourself(): string
     {
          return $this->getGreetings() . ' ! ' . $this->getMyNameIS() . ' ' . $this->getName() . ' . ';
     }
}

class RussianHuman extends HumanAbstract {
     public function getGreetings(): string
     {
          return ' Привет ';
     }

     public function getMyNameIS(): string
     {
          return 'Меня зовут';
     }
}

class EnglishHuman extends HumanAbstract {
     public function getGreetings(): string
     {
          return ' Hello ';
     }

     public function getMyNameIS(): string
     {
          return 'My Name is';
     }
}

$rus = new RussianHuman('Вася');
$eng = new EnglishHuman('Greg');

echo $rus->introduceYourself();
echo '<br>';
echo $eng->introduceYourself();
ivashkevich 06.10.2018 в 14:32

Отлично!!!

artemjeka 09.10.2018 в 09:44
class RussianHuman extends HumanAbstract {
    public function getGreetings(): string {
        return 'Привет';
    }

    public function getMyNameIs(): string {
        return 'Мое имя';
    }
}

class EnglishHuman extends HumanAbstract {
    public function getGreetings(): string {
        return 'Hello';
    }

    public function getMyNameIs(): string {
        return 'My name is';
    }
}

$nikolay = new RussianHuman('Коля');
$stepan = new RussianHuman('Степка');
echo $nikolay->introduceYourself() . '<br>'; // Привет! Мое имя Коля.
echo $stepan->introduceYourself() . '<br>'; // Привет! Мое имя Степка.
ivashkevich 12.10.2018 в 08:37

Супер гуд!

artemjeka 12.10.2018 в 15:09

Спасибо!

Protos 03.11.2018 в 01:08
class RuusianHuman extends HumanAbstract{

    public function getMyNameIs(): string
    {
        // TODO: Implement getMyNameIs() method.
        return 'Меня зовут ';
    }
    public function getGreetings(): string
    {
        // TODO: Implement getGreetings() method.
        return 'Привет';
    }
}

class EnglishHuman extends HumanAbstract{
    public function getMyNameIs(): string
    {
        // TODO: Implement getMyNameIs() method.
        return 'My nsme is';
    }
    public function getGreetings(): string
    {
        // TODO: Implement getGreetings() method.
        return 'Hello';
    }
}
$russian = new RuusianHuman('Иван');
echo $russian->introduceYourself();
$english = new EnglishHuman('John');
echo $english->introduceYourself();
ivashkevich 04.11.2018 в 00:22

Хорошо, но комментарии TODO нужно убрать. Они создаются для того, чтобы не забыть что-то сделать.

zebra 05.11.2018 в 00:04

Домашка:)

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string 
    {
        return 'Меня зовут';
    }
}

$rusObj = new RussianHuman('Игорь');
echo $rusObj->introduceYourself();
echo '<br>';

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string 
    {
        return 'My name is';
    }
}

$engObj = new EnglishHuman('Mike');
echo $engObj->introduceYourself();
ivashkevich 05.11.2018 в 09:15

Отлично =)

Todd 05.11.2018 в 01:34
abstract class HumanAbstract {

    private $name;

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

    public function getName(): string {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }

}

class RussianHuman extends HumanAbstract {

    public function getGreetings(): string {
        return 'Привет';
    }

    public function getMyNameIs(): string  {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract {

    public function getGreetings(): string  {
        return 'Hi';
    }

    public function getMyNameIs(): string  {
        return 'My name is';
    }

}

$rus = new RussianHuman('Иван');
$eng = new EnglishHuman('Todd');

echo $rus->introduceYourself() . '<br>';
echo $eng->introduceYourself();
ivashkevich 05.11.2018 в 09:16

Супер! =)

stokato 07.11.2018 в 09:26

Отнаследуйте от него 2 класса: RussianHuman и EnglishHuman.
Реализуйте в них методы getGreetings(), которые будут возвращать приветствие на разных языках, вроде «Привет».
Реализуйте в них методы getMyNameIs(), которые будут возвращать на разных языках слова «Меня зовут».
В итоге метод introduceYourself должен возвращать строку, вроде «Привет! Меня зовут Иван.»
Создайте объекты этих классов и заставьте их поздороваться.

<?php
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russianPeople = new RussianHuman('Павел');
$englishPeople = new EnglishHuman('Alex');

echo $russianPeople->introduceYourself();
echo '<br>';
echo $englishPeople->introduceYourself();
ivashkevich 08.11.2018 в 10:35

Отлично!

bildep 18.11.2018 в 16:07
<?php
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$men1 = new RussianHuman('Иван');
$men2 = new EnglishHuman('John');

echo $men1->introduceYourself();
echo $men2->introduceYourself();
ivashkevich 19.11.2018 в 21:51

Супер! Быстро осваиваешь материал.

CarfikDK 18.12.2018 в 15:43

Готово)

<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут' ;
    }
}

class EnglishMan extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hi';
    }

    public function getMyNameIs(): string
    {
        return 'My name is ' ;
    }
}

$russianHuman = new RussianHuman('Никита');
$englishHuman = new EnglishMan('Richard');

echo $russianHuman->introduceYourself();
echo '<br>';
echo $englishHuman->introduceYourself();
ivashkevich 18.12.2018 в 17:35

Супер!

[email protected] 23.12.2018 в 19:46
<?php 
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{

    public function getGreetings(): string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{

    public function getGreetings(): string
    {
        return 'Hello';
    }
    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russian = new RussianHuman('Иван');
$english = new EnglishHuman('Ivan');
echo $russian->introduceYourself();
echo $english->introduceYourself();
ivashkevich 24.12.2018 в 19:07

Отлично

alepawka 01.01.2019 в 21:18
    class RussianHuman extends HumanAbstract
    {
        public function getGreetings() 
        {
            return 'Привет';
        }
        public function getMyNameIs() 
        {
            return 'Меня зовут';
        }
    }
    class EnglishHuman extends HumanAbstract
    {
        public function getGreetings() 
        {
            return 'Hello';
        }
        public function getMyNameIs() 
        {
            return 'My name is';
        }
    }
    $leha = new RussianHuman('Алексей');
    $ben = new EnglishHuman('Ben');
    echo $leha->introduceYourself();
    echo '<br>';
    echo $ben->introduceYourself();
 ?>
ivashkevich 02.01.2019 в 20:59

Хорошо, но нужно добавить типы возвращаемых значений у методов. Почитайте о них в документации.

landialog 03.01.2019 в 02:11

class RussianHuman extends HumansAbstract
{
  public function getGreetings(): string
  {
      echo 'Привет ';
  }

  public function getMyNameIs(): string
  {
      echo ' меня зовут ';
  }
}

$ivan = new RussianHuman('Иван');
echo $ivan->introduceYourself();

class EnglishHuman extends HumansAbstract
{
    public function getGreetings(): string
    {
        echo 'Hello ';
    }

    public function getMyNameIs(): string
    {
        echo 'my name is ';
    }
}

$john = new EnglishHuman('Jogn');
echo $john->introduceYourself();
ivashkevich 03.01.2019 в 08:03

Отлично!

Bogdan 07.01.2019 в 14:06

EnglishHuman

<?php
require_once "HumanAbstract.php";

class EnglishHuman extends HumanAbstract
{
    public function getGreetings() : string
    {
        return 'Hello';
    }

    public function getMyNameIs() : string
    {
        return 'my name is';
    }
}

RussianHuman

<?php
require_once "HumanAbstract.php";

class RussianHuman extends HumanAbstract
{
    public function getGreetings() : string
    {
        return 'Привет';
    }

    public function getMyNameIs() : string
    {
        return 'меня зовут';
    }
}

index.php

<?php
require_once "EnglishHuman.php";
require_once "RussianHuman.php";

$engHum = new EnglishHuman('Alex');
$rusHum = new RussianHuman('Алеша');

echo $engHum->introduceYourself();
echo $rusHum->introduceYourself();
ivashkevich 07.01.2019 в 15:39

Супер!

Bugaga159 02.02.2019 в 14:26
class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут ';
    }

}
class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }
    public function getMyNameIs(): string
    {
        return 'My name is ';
    }
}

$russian = new RussianHuman('Андрей');
$english = new EnglishHuman('Mark');
echo $russian->introduceYourself();
echo $english->introduceYourself();
ivashkevich 03.02.2019 в 23:54

Отлично!

excent63 10.02.2019 в 14:45

Привет! Спасибо за урок.
Вот что получилось:

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hi';
    }
    public function getMyNameIs(): string
    {
        return 'My name';
    }
}

$russian = new RussianHuman('Иван');
$english = new EnglishHuman('Ivan');

echo $russian->introduceYourself().'<br>';
echo $english->introduceYourself();
ivashkevich 11.02.2019 в 11:18

Отлично!

cap 25.02.2019 в 21:19
<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$rus = new RussianHuman('Василий');
echo $rus->introduceYourself() . '<br>';

$eng = new EnglishHuman('Elton John');
echo $eng->introduceYourself();
ivashkevich 26.02.2019 в 09:37

Супер!

Evgeny 11.03.2019 в 22:25

<?php

abstract class HumanAbstract
{

    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.' . '<br>';
    }
}

class RussianHuman extends HumanAbstract
{

    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{

    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russianhuman = new RussianHuman('Иван');
echo $russianhuman->introduceYourself();

$englishhuman = new EnglishHuman('Alex');
echo $englishhuman->introduceYourself();
ivashkevich 12.03.2019 в 09:39

Отлично!

mitja1211 20.03.2019 в 11:48
abstract class HumanAbstract
{
    protected $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет!';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello!';
    }
    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}
$rus = new RussianHuman('Дмитрий');
echo $rus->introduceYourself();
$rus = new EnglishHuman('Дмитрий');
echo $rus->introduceYourself();
ivashkevich 20.03.2019 в 21:10

Ок, только тогда уж Dmitry =)

[email protected] 28.03.2019 в 19:25
<?php
/**
 * Created by PhpStorm.
 * User: Андрей
 * Date: 28.03.2019
 * Time: 18:10
 */

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

<?php
require_once 'HumanAbstract.php';

class RussianHuman extends HumanAbstract
{
    function getGreetings(): string
    {
        // TODO: Implement getGreetings() method.
        return 'Привет';

    }

    function getMyNameIs(): string
    {
        // TODO: Implement getMyNameIs() method.
        return 'Меня зовут ';
    }
}

<?php
require_once 'HumanAbstract.php';

class EnglishHuman extends HumanAbstract
{
    function getGreetings(): string
    {
        // TODO: Implement getGreetings() method.
        return 'Hello';
    }

    function getMyNameIs(): string
    {
        // TODO: Implement getMyNameIs() method.
        return 'My name is ';
    }
}

<?php
require_once 'EnglishHuman.php';
require_once 'RussianHuman.php';

$english = new EnglishHuman('Andrew');
$russian = new RussianHuman('Андрей');

echo $english->introduceYourself().'<br>';
echo $russian->introduceYourself().'<br>';
ivashkevich 29.03.2019 в 16:29

Комментарии ToDo можно убрать - вы же уже сделали, то что в них требуется.

[email protected] 29.03.2019 в 16:46

Вообще правильно?

ivashkevich 29.03.2019 в 17:41

Конечно) Отлично!

Boodoo 11.04.2019 в 06:24
<?php
    abstract class HumanAbstract
    {
        private $name;

        public function __construct($name)
        {
            $this->name = $name;
        }
        public function getName() : string
        {
            return $this->name;
        }

        abstract public function getGreetings() : string;
        abstract public function getMyNameIs() :string;

        public function introduceYourself() : string
        {
            return $this->getGreetings() . $this->getMyNameIs() . ' ' . $this->getName() . '!';
        }
    }

    class RussianHuman extends HumanAbstract
    {
        private $name;

        public function __construct($name)
        {
            parent::__construct($name);
        }
        public function getGreetings() : string
        {
            return 'Привет!';
        }
        public function getMyNameIs() : string
        {
            return 'Меня зовут ';
        }
    }

    class EnglishHuman extends HumanAbstract
    {
        private $name;

        public function __construct($name)
        {
            parent::__construct($name);
        }
        public function getGreetings() : string
        {
            return 'Halo! ';
        }
        public function getMyNameIs() : string
        {
            return 'My name is ';
        }
    }

    $test1 = new EnglishHuman('Max');
    $test2 = new RussianHuman('Макс');
    echo $test1->introduceYourself();
    echo $test2->introduceYourself();
ivashkevich 12.04.2019 в 10:44

Для чего в наследниках конструкторы?

Boodoo 12.04.2019 в 16:20

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

polvanovv 19.04.2019 в 11:10
<?php
abstract  class HumanAbstract
{
    private $name;

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

    public function getName():string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getNameIs(): string;

    public function introduseYourself():string
    {
        return $this->getGreetings() . '! ' . $this->getNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет!';
    }

    public function getNameIs(): string
    {
        return 'Меня зовут';
    }

}

class EnglishHuman extends  HumanAbstract
{

    public function getGreetings(): string
    {
        return 'Hello!';
    }

    public function getNameIs(): string
    {
        return 'My name is';
    }
}

$russian = new RussianHuman('Петя');
echo $russian->introduseYourself();
echo '<br>';

$english = new EnglishHuman('Arnold');
echo  $english->introduseYourself();
ivashkevich 19.04.2019 в 17:33

Отлично!

artemship 07.05.2019 в 13:18
<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russian = new RussianHuman('Владимир');
$american = new EnglishHuman('Donald');
echo $russian->introduceYourself();
echo '<br>';
echo $american->introduceYourself();
ivashkevich 10.05.2019 в 13:30

Отлично!

Dram 11.05.2019 в 12:39

Вроде разобрался...

<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }

}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }
    public function getMyNameIs(): string
    {
        return 'My name';
    }

}
$objectRussian = new RussianHuman('Петя');
$objectEnglish = new EnglishHuman('Jack');

echo $objectRussian->introduceYourself() . '<br>';
echo $objectEnglish->introduceYourself();
ivashkevich 11.05.2019 в 14:00

Отлично

Tina 09.06.2019 в 20:25

Домашка: 5 (Абстрактные классы)

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return "Привет";
    }

    public function getMyNameIs(): string
    {
        return "Меня зовут";
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is ';
    }
}

$russianHuman = new RussianHuman("Таня");
$englishHuman = new EnglishHuman("Tania");

echo $russianHuman->introduceYourself()."<br>";
echo $englishHuman->introduceYourself()."<br>";
ivashkevich 10.06.2019 в 03:06

Курс для начинающих проходили? Что за подчеркивания в именах переменных?

$russian_human

Должно быть

$russianHuman

"Меня зовут " - пробел в конце. return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.'; - ещё один пробел после $this->getMyNameIs(). Итого на выходе в строке два пробела подряд, а нужен один. Нужно внутри getMyNameIs() убрать пробел в конце.

ashfedor 12.06.2019 в 16:50
abstract  class  HumanAbstract
{
    private $name;
    public function __construct(string $name)
    {
        $this->name = $name;
    }
    public function getName(): string
    {
        return$this->name;
    }
    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;
    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}
class RussianHuman extends HumanAbstract
{
    public function getGreetings():string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string
    {
        return 'меня зовут';
    }

}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings():string
    {
        return 'Hello';
    }
    public function getMyNameIs(): string
    {
        return 'my name is';
    }

}
$russian = new RussianHuman('Русслан');

$english = new EnglishHuman('John');

echo $russian -> introduceYourself();
echo '<br>';
echo $english->introduceYourself();
ivashkevich 12.06.2019 в 18:13
return$this->name;

Должен быть пробел.

$russian -> introduceYourself();

Пробелов быть не должно.

В остальном - отличная работа.

rpash151 23.06.2019 в 12:09
<?php

abstract class HumanAbstract
{
    protected $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianMan extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет ';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут ';
    }
}
class EnglishMan extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello ';
    }
    public function getMyNameIs(): string
    {
        return 'My name is ';
    }
}

$rus= new RussianMan(Иван);
$eng= new EnglishMan(Tom);
echo $rus->introduceYourself();
echo '<br>';
echo $eng->introduceYourself();
ivashkevich 23.06.2019 в 17:53
protected $name;

В дочернем классе не используется доступ к свойству. Значит private.

$rus= new RussianMan(Иван);
$eng= new EnglishMan(Tom);

В аргументах должны передаваться строки, в кавычках. А у вас - константы, повезло, что имена без пробелов.

rpash151 23.06.2019 в 18:01

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

Moskva 03.07.2019 в 13:11
class RussianHuman extends HumanAbstract{

    public function getGreetings(): string{
        return 'Привет';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract{

    public function getGreetings(): string{
        return 'Hallo';
    }
    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$ivan = new RussianHuman('Иван');
$djon = new EnglishHuman('Jhonny');

echo $ivan->introduceYourself();
echo '<br>';
echo $djon->introduceYourself();
ivashkevich 03.07.2019 в 19:25

Отлично

Iliusha99 18.07.2019 в 19:08
//Homework abstract classes

abstract class HumanAbstract
{
    private $name;

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

    public function getName():string {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself():string {
        return $this->getGreetings().'! '.$this->getMyNameIs(). ' ' .$this->getName().'.';
    }
}

class RussianHuman extends HumanAbstract{

    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }

}

class EnglishHuman extends HumanAbstract{

    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$firstPerson = new RussianHuman('Илья');
echo $firstPerson->introduceYourself();

echo '<br>';

$secondPerson = new EnglishHuman('Mark');
echo $secondPerson->introduceYourself();
ivashkevich 18.07.2019 в 19:31

Супер!

Iliusha99 18.07.2019 в 20:00

Спасибо, ваше уроки очень полезные для меня.

ivashkevich 19.07.2019 в 06:58

Пожалуйста)

Metey 19.07.2019 в 11:53
<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }
    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$rus = new RussianHuman('Тимофей');
$eng = new EnglishHuman('Brayan');
echo $rus->introduceYourself() . '<br>';
echo $eng->introduceYourself() . '<br>';
ivashkevich 20.07.2019 в 14:37

Отлично

Bizzzon 20.07.2019 в 21:06
<?php
abstract class HumanAbstract
{
private $name;

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

public function getName(): string
{
return $this->name;
}

abstract public function getGreetings(): string;
abstract public function getMyNameIs(): string;

public function introduceYourself(): string
{
return $this->getGreetings() . ' ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
}
}
class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет,';
    }
    public function getMyNameIs(): string
    {
        return 'меня зовут ';
    }
}
class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello,';
    }
    public function getMyNameIs(): string
    {
        return 'my name is ';
    }
}
$introduceRussian = new RussianHuman('Игорь');
echo $introduceRussian->introduceYourself();
echo '</br>';
$introduceEnglish = new RussianHuman('Antonio');
echo $introduceEnglish->introduceYourself();
ivashkevich 21.07.2019 в 05:32

Всё отлично, только отступы в абстрактном классе поехали.

webdev 23.07.2019 в 14:02
class RussianHuman extends HumanAbstract
{
    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Мое имя';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russian = new RussianHuman('Иван');
echo $russian->introduceYourself();

$english = new EnglishHuman('John');
echo $english->introduceYourself();
ivashkevich 23.07.2019 в 20:34

Отлично!

Reechniy 23.07.2019 в 15:56
<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

abstract public function getGreetings(): string;
abstract public function getMyNameIs(): string;

public function introduceYourself(): string
{
    return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' '. $this->getName() . '.';
}
}
class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет!';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут ';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello!';
    }
    public function getMyNameIs(): string
    {
        return 'My name is ';
    }
}

$rusGuy = new RussianHuman('Игорь');
$engGuy = new EnglishHuman('John');

echo $rusGuy->introduceYourself();
echo '<br>';
echo $engGuy->introduceYourself();
ivashkevich 23.07.2019 в 20:35

Два восклицательных знака после приветствия. В большинстве языков он один. И отступы поехали в абстрактном классе.

Blook 04.08.2019 в 13:14

Отредактировал абстрактный класс, сделав свойство name "protected", чтобы его можно было унаследовать дочерним классам и, помимо этого, использовать parent::__construct($name). Считается ли это правильным для абстрактных классов?

abstract class HumanAbstract 
{
    private $name;

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

    public function getName(): string 
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string 
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName();
    }
}

class RussianHuman extends HumanAbstract
{
    private $name;

    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string 
    {
        return 'Привет';
    }

    public function getMyNameIs(): string 
    {
        return 'Меня зовут ' . $this->name;
    }
}

class EnglishHuman extends HumanAbstract
{
    private $name;

    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string 
    {
        return 'My name is ' . $this->name;
    }
}

$russHuman = new RussianHuman('Виктор');
$englishHuman = new EnglishHuman('Charlie');
echo $russHuman->introduceYourself();
echo '<br>';
echo $englishHuman->introduceYourself();
ivashkevich 04.08.2019 в 21:00

Чтобы использовать родительский контроллер вам не нужен прямой доступ к свойству name. Его следует оставить приватным

Blook 05.08.2019 в 21:02

Наверное я что-то неправильно делаю, но если я сделаю свойство name "private", не изменяя другой код, то получу на выходе
Привет! Меня зовут
Hello! My name is

ivashkevich 06.08.2019 в 20:18

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

gruimed 07.08.2019 в 13:06
class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return "Утречко!";
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return "Morning!";
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$rus = new RussianHuman('Иван');
$eng = new EnglishHuman('Bob');

echo $rus->introduceYourself();
echo $eng->introduceYourself();
ivashkevich 07.08.2019 в 17:00

Отлично

khuurak 17.08.2019 в 06:12
class RusHuman extends Human
{
    private $greetings;
    private $mynameis;

    public function __construct(string $name, string $greetings, string $mynameis)
    {
        parent::__construct($name);
        $this->greetings = $greetings;
        $this->mynameis = $mynameis;
    }

    public function getGreetings(): string
    {
        return $this->greetings;
    }

    public function getMyNameIs(): string
    {
        return $this->mynameis;
    }
}

class EngHuman extends Human
{
    private $greetings;
    private $mynameis;

    public function __construct(string $name, string $greetings, string $mynameis)
    {
        parent::__construct($name);
        $this->greetings = $greetings;
        $this->mynameis = $mynameis;
    }

    public function getGreetings(): string
    {
        return $this->greetings;
    }

    public function getMyNameIs(): string
    {
        return $this->mynameis;
    }
}

$rus_human = new RusHuman("Чингис", "Привет", "Меня зовут");
$eng_human = new EngHuman("Alex", "Hello", "My name is");

echo $rus_human->introduceYourSelf();
echo '<br>';
echo $eng_human->introduceYourSelf();
ivashkevich 18.08.2019 в 06:51

Зачем один и тот же код в двух классах? Он должен быть написан в родительском классе и использоваться в дочерних. Посмотрите решения других учеников.

khuurak 18.08.2019 в 08:15
class RusHuman extends Human
{
    public function getGreetings(): string
    {
        return 'Привет'
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут'
    }
}

class EngHuman extends Human
{
    public function getGreetings(): string
    {
        return 'Hello'
    }

    public function getMyNameIs(): string
    {
        return 'My name is'
    }
}

$rus_human = new RusHuman("Чингис");
$eng_human = new EngHuman("Alex");
echo $rus_human->introduceYourSelf();
echo '<br>';
echo $eng_human->introduceYourSelf();
ivashkevich 18.08.2019 в 13:28

А где код класса Human?
$rus_human - имена переменных пишутся в camelCase, без всяких подчеркушек.

khuurak 19.08.2019 в 04:00
abstract class Human
{
    private $name;
    public function __construct(string $name)
    {
        $this->name = $name;
    }

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RusHuman extends Human
{
    public function getGreetings(): string
    {
        return 'Привет'
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут'
    }
}

class EngHuman extends Human
{
    public function getGreetings(): string
    {
        return 'Hello'
    }

    public function getMyNameIs(): string
    {
        return 'My name is'
    }
}

$rusHuman = new RusHuman("Чингис");
$engHuman = new EngHuman("Alex");
echo $rusHuman->introduceYourSelf();
echo '<br>';
echo $engHuman->introduceYourSelf();

Код целиком.

Спасибо за замечания! В следующий раз буду писать имена переменных в camelCase

ivashkevich 19.08.2019 в 04:15

Отлично. Только ; не хватает после return.

khuurak 19.08.2019 в 04:33

Кстати да, :)

Pro100Bah 02.09.2019 в 13:37
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hi';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russianHuman = new RussianHuman('Даня');

$englishHuman = new EnglishHuman('Arnold');

echo $russianHuman->introduceYourself();
echo '<br>';
echo $englishHuman->introduceYourself();
echo '<br>';

Все равно путаюсь в реализации, пока не особо понятно, но если код работает, значит все правильно идет.

ivashkevich 02.09.2019 в 18:44

Отлично

Dreft 06.09.2019 в 06:35
    class RussianHuman extends HumanAbstract
    {
        public function getGreetings(): string
        {
            return 'Привет';
        }

        public function getMyNameIs(): string
        {
            return 'Меня зовут ';
        }
    }

    class EnglishHuman extends HumanAbstract
    {
        public function getGreetings(): string
        {
            return 'Hello';
        }

        public function getMyNameIs(): string
        {
            return 'My name is';
        }
    }

    $rus = new RussianHuman('Иван');
    echo $rus->introduceYourself();
    echo '<br>';
    $eng = new EnglishHuman('John');
    echo $eng->introduceYourself();
ivashkevich 06.09.2019 в 07:25

Отлично

XXX 25.09.2019 в 15:18
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    private $name;

    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут ' . $this->name;
    }
}

class EnglishHuman extends HumanAbstract
{
    private $name;

    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return 'Hi';
    }

    public function getMyNameIs(): string
    {
        return 'My name is ' . $this->name;
    }
}

$russianIvan = new RussianHuman('Иван');
$englishJhon = new EnglishHuman('Jhon');

echo $englishJhon->introduceYourself() . '<br>';
echo $russianIvan->introduceYourself();
ivashkevich 27.09.2019 в 17:48
    public function getName(): String

string с маленькой буквы

[email protected] 30.09.2019 в 20:34
<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings():string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class Englishhuman extends HumanAbstract
{
    public function getGreetings():string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$human1=new RussianHuman('Сергей');
$human2=new Englishhuman('Tom');

echo $human1->introduceYourself().PHP_EOL.'<br>';
echo $human2->introduceYourself();
ivashkevich 01.10.2019 в 09:14

Супер!

dliashchenko 13.10.2019 в 23:12
<?php
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.' . '<br/>';
    }
}
class RussianHuman extends HumanAbstract
{
    private $sayHello;
    private $myNameIs;

    public function __construct(string $sayHello, string $myNameIs, string $name)
    {
        parent::__construct($name);
        $this->sayHello = $sayHello;
        $this->myNameIs = $myNameIs;
    }
    public function getGreetings(): string
    {
        return $this->sayHello;
    }
    public function getMyNameIs(): string
    {
        return $this->myNameIs;
    }
}

class EnglishHuman extends HumanAbstract
{
    private $sayHello;
    private $myNameIs;

    public function __construct(string $sayHello, string $myNameIs, string $name)
    {
        parent::__construct($name);
        $this->sayHello = $sayHello;
        $this->myNameIs = $myNameIs;
    }
    public function getGreetings(): string
    {
        return $this->sayHello;
    }
    public function getMyNameIs(): string
    {
        return $this->myNameIs;
    }
}

$human1 = New EnglishHuman('Hello', 'My name is ', 'Denis');
$human2 = New RussianHuman('Привет', 'Меня зовут ', 'Денис');

echo $human1->introduceYourself();
echo $human2->introduceYourself();
ivashkevich 14.10.2019 в 08:36

Что ещё за value? Имена должны отражать своё назначение.

H3licoptero 01.11.2019 в 12:18
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут ';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hi';
    }

    public function getMyNameIs(): string
    {
        return 'My name is ';
    }

}

$russianGreeting = new RussianHuman('Иван');
$englishGreeting = new EnglishHuman('Nick');

echo $russianGreeting->introduceYourself();
echo '<br>';
echo $englishGreeting->introduceYourself();
ivashkevich 02.11.2019 в 03:37

Отлично!

TheTigra 04.11.2019 в 17:34

Домашка:

class RussianHuman extends HumanAbstract {
    private $greeting = 'Привет';
    private $myNameIs = 'Меня зовут';
    public function getGreetings():string {
        return $this->greeting;
    }
    public function getMyNameIs():string {
        return $this->myNameIs;
    }
}
class EnglishHuman extends HumanAbstract {
    private $greeting = 'Hello';
    private $myNameIs = 'My name is';
    public function getGreetings() :string {
        return $this->greeting;
    }
    public function getMyNameIs() :string {
        return $this->myNameIs;
    }
}
$ivan=new RussianHuman('Иван');
$john=new RussianHuman('John');
echo $ivan->introduceYourself();
echo $john->introduceYourself();
ivashkevich 04.11.2019 в 19:49
    public function getGreetings() :string {
        return $this->greeting;
    }
    public function getMyNameIs() :string {
        return $this->myNameIs;
    }

Методы в обоих классах полностью одинаковые. Это значит что они у них общие и их можно вынести в родительский класс, откуда они его оба унаследуют. Но я вам всё же советую перечитать ДЗ, так как это несколько отличается от того, что было нужно сделать.

andreskrip 13.01.2020 в 21:58

Надеюсь всё правильно понял

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }
    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$rus = new RussianHuman('Иван');
$eng = new EnglishHuman('John');

echo $rus->introduceYourself();
echo '<br>';
echo $eng->introduceYourself();
ivashkevich 15.01.2020 в 06:10

Всё верно поняли. Отлично)

EugeneGrigoryev 20.01.2020 в 11:01

Домашка:

<?php
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$human1 = new RussianHuman('Иван');
$human2 = new EnglishHuman('John');
echo $human1->introduceYourself();
echo '<br>';
echo $human2->introduceYourself();
ivashkevich 20.01.2020 в 13:01

Отлично

IgorG 04.02.2020 в 11:19
<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{

    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function  getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Helloy';
    }
    public function  getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russian = new RussianHuman('Иван');
$english = new EnglishHuman('Mike');

echo $russian->introduceYourself();
echo '<br>';
echo $english->introduceYourself();
ivashkevich 04.02.2020 в 13:19

Отлично

kvakazuabr 19.02.2020 в 19:01
class RussianHuman extends HumanAbstract
{
    protected function getGreetings(): string {
        return "Превет";
    }
    protected function getMyNameIs(): string {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    protected function getGreetings(): string {
        return 'Hello';
    }
    protected function getMyNameIs(): string {
        return 'My name is';
    }
}

$ivan = new RussianHuman('Иван');
$ivan1 = new EnglishHuman('Tom');

echo $ivan->introduceYourself();
echo $ivan1->introduceYourself();
ivashkevich 19.02.2020 в 19:26

Отлично

Salexandr 01.04.2020 в 18:25
<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EspanolHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hola';
    }

    public function getMyNameIs(): string
    {
        return 'Me llamo';
    }
}

$rus = new RussianHuman('Иван');
echo $rus->introduceYourself() . '<br>';
$esp = new EspanolHuman('Carlos');
echo $esp->introduceYourself();
ivashkevich 01.04.2020 в 19:54

Отлично

Dimitry 02.04.2020 в 06:33
<?php
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract{
    public function getGreetings(): string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут ';
    }
}

class EnglishHuman extends HumanAbstract{
    public function getGreetings(): string
    {
        return 'Hello';
    }
    public function getMyNameIs(): string
    {
        return 'My name is ';
    }
}

$russian = new RussianHuman('Иван');
$english = new EnglishHuman('John');
echo $russian->introduceYourself();
echo "<br>";
echo $english->introduceYourself();

Домашка

ivashkevich 02.04.2020 в 07:55

Отлично

Soib 04.04.2020 в 20:37
<?php 

abstract class HumanAbstract
{

    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! '  . $this->getMyNameIs() . ' ' . $this->getName();
    }

}

class RussianHumans extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }

}

class EnglishHumans extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russian = new RussianHumans('Соиб');
$english = new EnglishHumans('Liza');

echo $russian->introduceYourself()."\n";
echo $english->introduceYourself();
ivashkevich 05.04.2020 в 19:16

Супер!

Dmitry.Dudin 08.04.2020 в 00:03
<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$rus = new RussianHuman('Дмитрий');
$eng = new EnglishHuman('John');

echo $rus->introduceYourself();
echo '</br>';
echo $eng->introduceYourself();
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

Всё шикарно заходит, спасибо

ivashkevich 08.04.2020 в 08:02

Отлично

Alexann 09.04.2020 в 18:56
...
class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'my name is';
    }
}

$e = new EnglishHuman('Jimmy');
$r = new RussianHuman('Иван');
echo $e->introduceYourself() . PHP_EOL;
echo $r->introduceYourself() . PHP_EOL;
ivashkevich 10.04.2020 в 12:47

Отлично

[email protected] 11.04.2020 в 13:07
abstract class HumanAbstract {
  protected $name;

  public function __construct(string $name) {
    $this->name = $name;
  }
  public function getName() : string {
    return $this->name;
  }

  abstract public function getGreetings() : string;
  abstract public function getMyNameIs() : string;

  public function introduceYourself() : string {
    return $this->getGreetings() . '! ' . $this->getMyNameIs() . '<br />';
  }
}

class RussianHuman extends HumanAbstract {

  public function getGreetings() : string {
    return 'Привет';
  }
  public function getMyNameIs() : string {
    return 'Меня зовут ' . $this->name;
  }
}

class EnglishHuman extends HumanAbstract {

  public function getGreetings() : string {
    return 'Hello';
  }
  public function getMyNameIs() : string {
    return 'My name is ' . $this->name;
  }
}

$russian1 = new RussianHuman('Петя');
$englishman1 = new EnglishHuman('John');

echo $russian1->introduceYourself();
echo $englishman1->introduceYourself();
ivashkevich 11.04.2020 в 21:29

Норм. А слабо сделать свойство name private?

YuraG 13.04.2020 в 19:29
<?php

trait GetMyNameIsTrait
{
    public function getMyNameIs(): string
    {
        if (__CLASS__ == 'RussianHuman'){
            return 'Меня зовут ';
        }
        return 'My name is ';
    }
}

abstract class HumanAbstract
{
    private $name;

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

    public function getName()
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    use GetMyNameIsTrait;

    public function __construct($name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return "Привет! ";
    }
}

class EnglishHuman extends HumanAbstract
{
    use GetMyNameIsTrait;

    public function __construct($name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return "Hello!";
    }
}
ivashkevich 14.04.2020 в 19:08

С трейтом дичь какая-то, почему не сделали как с getGreetings()?

YuraG 16.04.2020 в 19:38

Разве trait не используется для добавления функционала классам.
Из этих мыслей добавил trait.

ivashkevich 17.04.2020 в 08:58

Да, но только когда код требуется в нескольких не связанных между собой классов. А у вас в трейте прямо происходит привязка к классам - если это класс один, то делай одно, если другой - другое.

YuraG 17.04.2020 в 22:23

спасибо за разъяснение , учту.
А как все таки правильно вызывать конструктор с параметрами родительского класса в дочернем конструкторе класса? если понял верно то параметры передаваемые в конструктор совпадают с родительским конструктором по кол-ву и типу можно не указывать parent. ?

ivashkevich 18.04.2020 в 06:09

В дочернем конструкторе, как и в любом другом методе, можно расширять конструктор, то есть добавлять новые параметры. Но остальные, которые совпадают по порядку с родительским, нельзя изменять.
При вызове parent::method вызывается родительский метод. Его можно вызывать, а можно и не вызывать. Но если его не вызвать, то код родительского конструктора попросту не выполнится.
Всё вышеописанное касается не только конструкторов, но и вообще любых методов. Потому что конструктор это такой же метод как и все остальные, просто вызывается автоматически при создании класса.

Fill 15.04.2020 в 20:37
<?php
//...

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }
    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russian = new RussianHuman('Иван');
$english = new EnglishHuman('Jack');

echo $russian->introduceYourself() . '<br>'; //Привет! Меня зовут Иван.
echo $english->introduceYourself() . '<br>'; //Hello! My name is Jack.
ivashkevich 16.04.2020 в 06:49

Супер!

Timurik 21.04.2020 в 09:30

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

<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут ';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hi';
    }
    public function getMyNameIs(): string
    {
        return 'My name is ';
    }
}

$Rus1 = new RussianHuman('Иван');
echo $Rus1->introduceYourself() . '<br>';
$Eng1 = new EnglishHuman('Ivan');
echo $Eng1->introduceYourself() . '<br>';
ivashkevich 21.04.2020 в 18:19

Отлично!

studentDev 25.04.2020 в 14:40

Homework:

<?php
    abstract class HumanAbstract
    {
        private $name;

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

        public function getName(): string
        {
            return $this->name;
        }

        abstract public function getGreetings(): string;
        abstract public function getMyNameIs(): string;

        public function introduceYourself(): string
        {
            return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
        }
    }

    class RussianHuman extends HumanAbstract
    {
        public function getGreetings(): string
        {
            return 'Привет!';
        }
        public function getMyNameIs(): string
        {
            return 'Меня зовут';
        }
    }

    class EnglishHuman extends HumanAbstract
    {
        public function getGreetings(): string
        {
            return 'Hello!';
        }
        public function getMyNameIs(): string
        {
            return 'My name is';
        }
    }

    $objHumans = [
        new RussianHuman('Иван') ,
        new EnglishHuman('Ivan') ,
    ];
    foreach($objHumans as $human) {
        if($human instanceof HumanAbstract) {
            echo $human->introduceYourself();
            echo '</br>';
        }
    }

Всё исправил...

ivashkevich 25.04.2020 в 17:36

Для чего в дочерних методах переопределили конструктор и метод introduceYourself?

$language - почему такое имя у переменной?

[email protected] 27.04.2020 в 23:27
<?php
    abstract class HumanAbstract
    {
        private $name;
        public function __construct(string $name)
        {
            $this->name = $name;
        }
        public function getName()
        {
            return $this->name;
        }
        abstract public function getGreetings():string;
        abstract public function getMyNameIs():string;
        public function introduceYourself():string
        {
            return $this->getGreetings().'! '.$this->getMyNameIs().' '.$this->getName();
        }
    }
    class RussianHuman extends HumanAbstract
    {
        public function getGreetings():string
        {
            return 'Привет';
        }
        public function getMyNameIs():string
        {
            return 'Моё имя ';
        }
    }
    class EnglishHuman extends HumanAbstract
    {
        public function getGreetings():string
        {
            return 'Hello';
        }
        public function getMyNameIs():string
        {
            return 'My name is ';
        }
    }
    $russianHuman = new RussianHuman('Петя');
    echo $russianHuman->introduceYourself().'<br/>';
    $englishHuman = new EnglishHuman('Georg');
    echo $englishHuman->introduceYourself();
ivashkevich 28.04.2020 в 06:19

Отлично

titelivus 04.05.2020 в 05:18
<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russian = new RussianHuman('Артём');
$english = new EnglishHuman('Johnny');

echo $russian->introduceYourself();
echo '<br>';
echo $english->introduceYourself();
ivashkevich 06.05.2020 в 13:27

Отлично

[email protected] 08.05.2020 в 20:12
<?php
abstract class Human
{
    private $name;

    public function __construct(string $name)
    {
        $this->name = $name;
    }
    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends Human
{
    public function getGreetings(): string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут ';
    }
}

class EnglishHuman extends Human
{
    public function getGreetings(): string
    {
        return 'Hello';
    }
    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russian = new RussianHuman('Василий');
$english = new EnglishHuman('George');
echo $russian->introduceYourself() . '<br>';
echo $english->introduceYourself();
ivashkevich 08.05.2020 в 20:34

Отлично

[email protected] 16.05.2020 в 21:55
abstract class HumanAbstract {
    private $name;
    public function __construct($name)
    {
        $this->name = $name;
    }
    public function getName()
    {
        return $this->name;
    }

    abstract public function getGreetings(): string ;
    abstract public function getMyNameIS(): string ;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . ' ! ' . $this->getMyNameIS() . ' ' . $this->getName() . ' . ';
    }
}

class RussianHuman extends HumanAbstract {
    public function getGreetings(): string
    {
        return ' Привет ';
    }

    public function getMyNameIS(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract {
    public function getGreetings(): string
    {
        return ' Hello ';
    }

    public function getMyNameIS(): string
    {
        return 'My Name is';
    }
}

$russianHuman = new RussianHuman('Иван');
$englishHuman = new EnglishHuman('John');

echo $russianHuman->introduceYourself();
echo '<br>';
echo $englishHuman->introduceYourself();
ivashkevich 17.05.2020 в 14:55
    public function __construct($name)

Тип аргумента потеряли

Sviatoslav 22.05.2020 в 21:55

Мой пример

<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '. <br>';
    }
}

class RussianHuman extends HumanAbstract
{
    private $greatings = 'Привет';
    private $myName = 'Меня зовут';

    public function getGreetings(): string
    {
        return $this->greatings;
    }

    public function getMyNameIs(): string
    {
        return $this->myName;
    }
}

class EnglishHuman extends HumanAbstract
{
    private $greatings = 'Hello';
    private $myName = 'My name is';

    public function getGreetings(): string
    {
        return $this->greatings;
    }

    public function getMyNameIs(): string
    {
        return $this->myName;
    }
}

$objR = new RussianHuman('Иван');
$objE = new EnglishHuman('Ivan');
echo $objR->introduceYourself();
echo $objE->introduceYourself();
ivashkevich 23.05.2020 в 20:20

Отлично

NR 26.05.2020 в 01:38
<?php

//...
class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }
    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$objectRu = new RussianHuman('Владимир');
$objectEng = new EnglishHuman('Arnold');
echo $objectRu->introduceYourself();
echo '<br>';
echo $objectEng->introduceYourself();
ivashkevich 26.05.2020 в 10:20

Отлично

IePyton 27.05.2020 в 17:25
<?php

abstract class HumanAbstrtact
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }

}

class RussianHuman extends HumanAbstrtact
{
    public function getGreetings(): string
    {
        return 'Привет';// TODO: Implement getGreetings() method.
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';// TODO: Implement getMyNameIs() method.
    }
}

class EnglishHuman extends HumanAbstrtact
{
    public function getGreetings(): string
    {
        return 'Hello';   // TODO: Implement getGreetings() method.
    }

    public function getMyNameIs(): string
    {
        return 'My name is';// TODO: Implement getMyNameIs() method.
    }

}

$russianMan = new RussianHuman('Иван');
var_dump($russianMan->introduceYourself());

$englishMan = new EnglishHuman('John');
var_dump($englishMan->introduceYourself());
ivashkevich 27.05.2020 в 18:09

Отлично. Только TODO-комменты уже можно убрать, вы ведь реализовали логику.

n.yurasheva 02.06.2020 в 19:50
<?php
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}
class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string    {
        return 'Меня зовут';
    }
}
class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hi';
    }
    public function getMyNameIs(): string    {
        return 'My name is';
    }
}

$russianHumanName = new RussianHuman('Иван');
$englishHumanName = new EnglishHuman('Ivan');

echo $russianHumanName -> introduceYourself().'<br>';
echo $englishHumanName -> introduceYourself().'<br>';
ivashkevich 03.06.2020 в 08:58

Отлично!

superbobr 11.06.2020 в 19:46
<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут ' . $this->name;
    }
}

class EnglishHuman extends HumanAbstract
{
    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is ' . $this->name;
    }
}

$human1 = new RussianHuman('Иван');
$human2 = new EnglishHuman('Jack');

echo $human1->introduceYourself() . '<br>';
echo $human2->introduceYourself();
ivashkevich 11.06.2020 в 20:32

Отлично

[email protected] 27.06.2020 в 21:03

Добрый вечер.
Честно говоря, назначение абстрактных классов я не понял. Т.е. в д.з. вместо абстрактного вполне можно было использовать и обычный, ничего бы не изменилось.

<?php
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract{
    public function getGreetings(): string{
        return 'Привет';
    }
    public function getMyNameIs(): string{
        return 'Меня зовут ';
    }
}
class EnglishHuman extends HumanAbstract{
    public function getGreetings(): string{
        return 'Hi';
    }
    public function getMyNameIs(): string{
        return 'My name is ';
    }
}
$objectA = new RussianHuman('Данила');
$objectB = new EnglishHuman('Daniel');
echo $objectA->introduceYourself();
echo '<br>';
echo $objectB->introduceYourself();
ivashkevich 29.06.2020 в 11:04

Отлично.

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

Далее в уроках когда дойдем до MVC будут более подходящие примеры.

[email protected] 29.06.2020 в 22:04

Спасибо за помощь.

Hellbound 15.07.2020 в 02:13
<?php
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут ';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$rus = new RussianHuman('Иван');
$eng = new EnglishHuman('George');

echo $rus->introduceYourself();
echo '<br>';
echo $eng->introduceYourself();
ivashkevich 16.07.2020 в 12:53

Отлично!

VitaliyB 30.07.2020 в 16:13
<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return 'Привет';

    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут ';

    }

    public function introduceYourself(): string
    {
        return parent::introduceYourself(); // TODO: Change the autogenerated stub
    }

}

class EnglishHuman extends HumanAbstract
{

    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getMyNameIs(): string
    {
        return 'My name is ';
    }

    public function getGreetings(): string
    {
        return 'Hallo';
    }

    public function introduceYourself(): string
    {
        return parent::introduceYourself();
    }
}

$manRu1 = new RussianHuman('Иван');
echo $manRu1->introduceYourself();
echo '<br>';
$manEn1 = new EnglishHuman('Bob');
echo $manEn1->introduceYourself();
ivashkevich 02.08.2020 в 17:26
 // TODO: Change the autogenerated stub

Для чего этот комментарий оставили?

    public function introduceYourself(): string
    {
        return parent::introduceYourself(); // TODO: Change the autogenerated stub
    }

Для чего эта прослойка?

VitaliyB 04.08.2020 в 06:12

Коммент шторм автоматом вывел.
Что значит - переслойка?
Исправил...

ivashkevich 05.08.2020 в 08:26

Прослойка - значит еще один слой кода, лежащий между двумя другими уровнями. Вместо того чтобы напрямую вызвать introduceYourself у HumanAbstract вы определили методы у дочерних классов, которые только и делают, что вызывают родительский. От них можно избавиться и ничего в поведении программы не изменится.

demos 28.08.2020 в 16:06
<?
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
    return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
    return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    private $name;

    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
       return 'Меня зовут';
    }

}

class EnglishHuman extends HumanAbstract
{
    private $name;

    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russianHuman= new RussianHuman ('Иван');
echo $russianHuman->introduceYourself().'<br>';
$englishHuman= new EnglishHuman ('John');
echo $englishHuman->introduceYourself();
ivashkevich 29.08.2020 в 18:08

А что с отступами в первом классе?

demos 03.09.2020 в 14:41

Исправил, спасибо.

Ed8L 21.10.2020 в 13:34
class RussianHuman extends HumanAbstract
{
    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$boris = new RussianHuman('Борис');
echo $boris->introduceYourself() . '<br>';

$micheal = new EnglishHuman('Michael');
echo $micheal->introduceYourself();
ivashkevich 22.10.2020 в 18:43

Отлично

[email protected] 10.11.2020 в 20:28
<?php
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}
class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }
    public function getMyNameIs(): string
        {
        return 'Меня зовут';
    }   
}
class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'hello';
    }
    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}
$objectR = new RussianHuman('Павел');
$objectR->introduceYourself();

$objectE = new EnglishHuman('Scott');
$objectE->introduceYourself();
echo $objectR->introduceYourself();
echo $objectE->introduceYourself();
?>
ivashkevich 10.11.2020 в 20:32

Отлично. Только закрывающй тег в конце файла не нужен.

[email protected] 12.11.2020 в 02:13

Нуу, эмммм, как-то так, я считаю, так будет лучше, удобнее вводить входные параметры)))))

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class EnglishHuman extends HumanAbstract
{

    private $textEnglishHuman;
    private $myNameIsEnglishHuman;

    /**
     * EnglishHuman constructor.
     * @param string $textEnglishHuman
     * @param $myNameIsEnglishHuman
     * @param string $name
     */
    public function __construct(string $textEnglishHuman, string $myNameIsEnglishHuman, string $name)
    {
        parent::__construct( $name );
        $this->textEnglishHuman = $textEnglishHuman;
        $this->myNameIsEnglishHuman = $myNameIsEnglishHuman;
    }

    public function getGreetings(): string
    {
        return $this->textEnglishHuman;
    }

    public function getMyNameIs(): string
    {
        return $this->myNameIsEnglishHuman;
    }

}
class RussianHuman extends HumanAbstract {

    private $textRussianHuman;
    private $myNameIsRussianHuman;

    /**
     * RussianHuman constructor.
     * @param string $textRussianHuman
     * @param string $myNameIsRussianHuman
     * @param string $name
     */
    public function __construct(string $textRussianHuman, string $myNameIsRussianHuman, string $name)
    {
        parent::__construct($name);
        $this->textRussianHuman = $textRussianHuman;
        $this->myNameIsRussianHuman = $myNameIsRussianHuman;
    }

    public function getGreetings(): string
    {
        return $this->textRussianHuman;
    }

    public function getMyNameIs(): string
    {
        return $this->myNameIsRussianHuman;
    }

}
$russianHuman = new RussianHuman('Привет', 'Меня зовут', 'Александр' );
echo $russianHuman->introduceYourself();
echo '<br />';
$englishHuman = new EnglishHuman('Hello','My name is', 'Aleksandr');
echo $englishHuman->introduceYourself();
ivashkevich 13.11.2020 в 02:37

У вас получилось дублирование кода. Только имена переменных отличаются.

pixel 18.11.2020 в 00:30
<?php

    abstract class HumanAbstract
    {
        private $name;

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

        public function getName(): string
        {
            return $this->name;
        }

        abstract public function getGreetings(): string;

        abstract public function getMyNameIs(): string;

        public function introduceYourself(): string
        {
            return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
        }
    }

    class RussianHuman extends HumanAbstract
    {
        public function getGreetings(): string
        {
            return 'Привет';
        }

        public function getMyNameIs(): string
        {
            return 'Меня зовут ';
        }

    }

    class EnglishHuman extends HumanAbstract
    {
        public function getGreetings(): string
        {
            return 'Hello';
        }

        public function getMyNameIs(): string
        {
            return 'My name is ';
        }
    }

    $russian = new RussianHuman('Иван');
    $english = new EnglishHuman('Ben');
    echo $russian->introduceYourself();
    echo '<br>';
    echo $english->introduceYourself();
ivashkevich 19.11.2020 в 20:32

Отлично

MikeSiebel 20.11.2020 в 14:49

Добрый день!

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }

}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is ';
    }

}
$RussianHuman = new RussianHuman('Иван');
echo $RussianHuman -> introduceYourself();
echo '<br>';
$EnglishHuman = new EnglishHuman('Mike');
echo $EnglishHuman -> introduceYourself();
ivashkevich 23.11.2020 в 17:28

Отлично!

Larisa 25.11.2020 в 22:19
abstract class HumanAbstract
{
    private $name;

    public function __construct (string $name)
    {
        $this->name=$name;
    }
    public function getName(): string
    {
        return $this->name;
    }
    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Добрый день';
    }
    public function getMyNameIs(): string
    {
        return 'Меня зовут ';
    }
}

class EnlishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
       return 'Hello';
    }
    public function getMyNameIs(): string
    {
       return 'My name is ';
    }
}

$russian=new RussianHuman('Мария');
$english=new EnlishHuman('Mary');

echo $russian->introduceYourself();
echo '<br>';
echo $english->introduceYourself();

Результат:
Добрый день! Меня зовут Мария.
Hello! My name is Mary.

ivashkevich 26.11.2020 в 10:38

Отлично

serega19860511 07.12.2020 в 22:20
abstract class HumanAbstract
{
    private $name;

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

    public function name(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself()
    {
        echo  $this->getGreetings().'! '.$this->getMyNameIs().' '.$this->name.'<br>';
    }
}

class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }
}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My names is';
    }
}

$russian = new RussianHuman('Сергей');
$english = new EnglishHuman('Bill');

 $russian->introduceYourself();
 $english->introduceYourself();
ivashkevich 08.12.2020 в 21:13

Отлично

serega19860511 07.12.2020 в 22:34

У меня вот такой вопрос: как видно из задания в методе introduceYourself я решил воспользоваться конструкцией echo и при тестировании кода получил ошибку: Fatal error: Uncaught TypeError: Return value of HumanAbstract::introduceYourself() must be of the type string, none returned in D:\OSPanel\domains\test2\public_html\index.php:262 Stack trace: #0 D:\OSPanel\domains\test2\public_html\index.php(294): HumanAbstract->introduceYourself() #1 {main} thrown in D:\OSPanel\domains\test2\public_html\index.php on line 262, НО объект RussianHuman отработал нормально пример работы кода Вопрос почему оба не сломались?
После этого я убрал контроль типа данных у этого метода и всё успешно отработало.
Потом также протестировал в этом методе return и вернул контроль типов. И вот вопрос: когда мы в методе делаем контроль возвращаемых данных echo нельзя использовать? Надеюсь что данёс суть вопроса. Спасибо.

ivashkevich 08.12.2020 в 21:15

Суть не в том, что вы echo использовали, а в том что написали что метод возвращает строку и не вернули её. Если бы написали return 'abc'; а перед ним написали бы echo, то всё бы работало.

kan22 25.12.2020 в 21:51
class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }

}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }

}

$russianHuman = new RussianHuman('Александр Невский');
$englishHuman = new EnglishHuman('Peter Parker');

echo $russianHuman->introduceYourself();
echo '<br>';
echo $englishHuman->introduceYourself();
ivashkevich 26.12.2020 в 21:46

Супер

dimadima 27.02.2021 в 11:42
<?php
abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;
    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}
class RussianHuman extends HumanAbstract
{

    public function getGreetings(): string
    {
    return 'Привет';
    }

    public function getMyNameIs(): string
    {
    return 'Меня зовут,';
    }
}
class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
    return 'Hello';
    }
    public function getMyNameIs(): string
    {
    return 'My name is';
    }
}
$objectA = new RussianHuman('Иван');
echo $objectA->introduceYourself().'<br>';

$objectB = new EnglishHuman('Mike');
echo $objectB->introduceYourself();
ivashkevich 28.02.2021 в 06:16

Отлично

Egor.Ka 14.03.2021 в 18:56

Сделал, надеюсь правильно понял задание). Почему в Problems пишет, что метод introduceYourself() нигде не используется, хотя я его юзаю в выводе в цикле?

<?php

abstract class HumanAbstract
{
    private $name;

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

    public function getName(): string
    {
        return $this->name;
    }

    abstract public function getGreetings(): string;

    abstract public function getMyNameIs(): string;

    public function introduceYourself(): string
    {
        return $this->getGreetings() . '! ' . $this->getMyNameIs() . ' ' . $this->getName() . '.';
    }
}

class RussianHuman extends HumanAbstract
{
    private $hi;
    private $value;
    public function __construct( string $name, string $hi , string $value)
    {
        parent::__construct( $name);
        $this->hi = $hi;
        $this->value = $value;
    }
    public function getGreetings(): string
    {
        return $this->hi;
    }

    public function getMyNameIs(): string
    {
        return $this->value;
    }

}

class EnglishHuman extends HumanAbstract
{
    private $hi;
    private $value;
    public function __construct( string $name, string $hi , string $value)
    {
        parent::__construct( $name);
        $this->hi = $hi;
        $this->value = $value;
    }

    public function getGreetings(): string
    {
        return $this->hi;
    }

    public function getMyNameIs(): string
    {
        return $this->value;
    }

}

$humans = [
    new EnglishHuman('Ivan', 'Hello', 'My  name is'),
    new RussianHuman('Иван', 'Привет', 'Меня зовут')
];

foreach ($humans as $human) {
    echo $human->introduceYourself();
    echo '<br>';

}
ivashkevich 17.03.2021 в 16:11

Видимо глючит IDE.

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

Vladimir96 14.03.2021 в 22:51

Такой вопрос почему методы влияют на переменные вне метода?

class RussianHuman extends HumanAbstract
{
    private $hello = 'Привет';
    private $myNameIs = 'Меня зовут';

    public function getGreetings(): string
    {
        return $this->hello;
    }

    public function getMyNameIs(): string
    {
        return $this->myNameIs;
    }
}

class EnglishHuman extends HumanAbstract
{
    private $hello = 'Hello';
    private $myNameIs = 'My name is';

    public function getGreetings(): string
    {
        return $this->hello;
    }

    public function getMyNameIs(): string
    {
        return $this->myNameIs;
    }
}

$russian = new RussianHuman('Иван!');
$english = new EnglishHuman('Bred');
ivashkevich 17.03.2021 в 16:13

Такой вопрос почему методы влияют на переменные вне метода?

На какие переменные? На свойства класса?

Sergey503 16.05.2021 в 16:35
class RussianHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Привет';
    }

    public function getMyNameIs(): string
    {
        return 'Меня зовут';
    }

}

class EnglishHuman extends HumanAbstract
{
    public function getGreetings(): string
    {
        return 'Hello';
    }

    public function getMyNameIs(): string
    {
        return 'My name is';
    }
}

$russian = new RussianHuman('Иван');
$english = new EnglishHuman('Noah');

echo $russian->introduceYourself();
echo '<br>';
echo $english->introduceYourself();
ivashkevich 19.05.2021 в 21:29
        // TODO: Implement getGreetings() method.

Вот это нужно поубирать

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