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


Galay
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

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

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

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

Galay

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

Ilon
<?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

Хорошо.

computerix
<?
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

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

Benya
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

А где метод introduceYourself?

DmitryGavrilov
<?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

Отлично

SBTesla
<?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

Отлично!!!

ArtemijeKA
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

Супер гуд!

ArtemijeKA

Спасибо!

Protos
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

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

zebra

Домашка:)

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

Отлично =)

Todd
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

Супер! =)

demyanovpaul@yandex.ru

Отнаследуйте от него 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

Отлично!

bildep
<?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

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

lordbear53@gmail.com

Готово)

<?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

Супер!

vadymbilyi@gmail.com
<?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

Отлично

alepawka
    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

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

landialog

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

Отлично!

Bogdan

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

Супер!

Bugaga159
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

Отлично!

excent63

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

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

Отлично!

arturshopengauer@mail.ru
<?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

Супер!

Evgeny

<?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

Отлично!

arhipow@mail.ru
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

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

babls2332@gmail.com
<?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

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

babls2332@gmail.com

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

ivashkevich

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

Boodoo
<?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

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

Boodoo

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

polvanovv
<?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

Отлично!

artemship
<?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

Отлично!

Dram

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

<?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

Отлично

Tina

Домашка: 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

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

$russian_human

Должно быть

$russianHuman

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

ashfedor
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
return$this->name;

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

$russian -> introduceYourself();

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

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

rpash151
<?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
protected $name;

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

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

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

rpash151

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

Moskva
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

Отлично

Iliusha99
//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

Супер!

Iliusha99

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

ivashkevich

Пожалуйста)

Metey
<?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

Отлично

Bizzzon
<?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

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

webdev
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

Отлично!

Reechniy
<?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

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

Blook

Отредактировал абстрактный класс, сделав свойство 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

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

Blook

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

ivashkevich

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

gruimed
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

Отлично

khuurak
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

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

khuurak
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

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

khuurak
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

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

khuurak

Кстати да, :)

Pro100Bah
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

Отлично

Dreft
    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

Отлично

XXX
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
    public function getName(): String

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

prinzplanloser0514@gmail.com
<?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

Супер!

dliashchenko
<?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

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

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