Новый комментарий

SlipKnot 13.07.2018 в 05:36

Домашка:

<?php

class Cat
{
    private $name;
    private $color;
    public $weight;
    public function __construct (string $name, string $color) /*теперь при создании нового кота
                                                                мы должны указать имя и цвет*/
    {
        $this->name = $name;
        $this->color = $color;
    }
    public function sayHello()
    {
    echo 'Дратути, меня зовут ' . $this->name . ', моя шерстка цвета ' . $this->color . '<br>';
    } /* дополнение к методу приветствия */
    public function setName(string $name)
    {
        $this-> name = $name;
    }
    public function setColor(string $color) //метод для присвоения цвета шерсти кота
    {
        $this-> color = $color;
    }
    public function  getName():string
    {
        return $this->name;
    }
    public function getColor():string // получаем значения цвета шерсти
    {
        return $this->color;
    }
}
$cat1 = new Cat('Снежок', 'белый');
$cat1-> sayHello(); //Дратути, меня зовут Снег, моя шерстка цвета белый
$cat1-> setName('Снег');
$cat1->setColor('серый');
$cat2 = new Cat ('Барсик', 'рыжий');
$cat2->sayHello(); //Дратути, меня зовут Барсик, моя шерстка цвета рыжий
$cat1->sayHello(); //Дратути, меня зовут Снег, моя шерстка цвета серый
ivashkevich 14.07.2018 в 09:25

Отлично! Всё-таки перекрасили :D

Galay 18.07.2018 в 14:33
<?php
class Cat 
    {
        private $name;
        private $color;
        public function __construct(string $name, string $color){
            $this->name = $name;
            $this->color = $color;
        }

        public function sayHello() {
            echo "Привет, меня зовут {$this->name}, мой цвет - $this->color.";
        }
        public function getColor(): string {
            return $this->color;
        }
        public function setColor(string $color) {
             $this->color = $color;
        }

    }
    $cat1 = new Cat('Барсик','рыжий');
    // $cat1 -> name = 'Барсик';
    // $cat1 -> color = 'рыжий';
    echo '<br>';
    echo $cat1->sayHello();
    $cat2 = new Cat('Снежок','белый');
    // $cat1 -> name = 'Снежок';
    // $cat1 -> color = 'белый';
    echo '<br>';
    echo $cat2->sayHello();
    echo '<br>';
    $cat1->setColor('черный');
    echo $cat1->getColor();

и еще ругается на public function getColor(): string
Parse error: syntax error, unexpected ':', expecting ';' or '{' in codetester_source.php on line 14
а другой сервер не ругается. Почему?

ivashkevich 19.07.2018 в 09:48

Там где ругается - старая версия PHP.

echo $cat1->sayHello();

Вы тут вызываете echo, и внутри метода вызываете echo. Либо в методе возвращайте строку через return, либо тут не нужно делать echo, и оставить его только внутри метода.

Galay 19.07.2018 в 14:52

Странно, я тоже подумал версия старая, но проверил - 7.2
Вобщем не понятно, ну да ладно.. Про echo понял, действительно. Видимо не серьезная ошибка, интерпритатор не ругается.
Артем, а на ООП мало кто домашку в ответах выкладывает?

ivashkevich 21.07.2018 в 06:16

Да, пока мало кто выкладывает, только-только начали покупать вообще)

Ilon 01.08.2018 в 09:23

Домашка


<?php
    Class Cat{
        private $name;
        private $color;
        public $weight;

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

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

        public function getColor($color){
            $this->color = $color;
            return $this->color;
        }
        public function sayHello(){
            echo "Привет! Меня зовут ".$this->name." и мой цвет ".$this->color." и мой вес ".$this->weight."<br>";
        }
    }

    $cat1 = new Cat("Снежок", "белый");
    $cat1->weight = "3 кг";

    $cat2 = new Cat("Барсик", "рыжый");
    $cat2->weight = "3,5 кг";

    echo $cat1->sayHello();
    echo $cat2->sayHello();
?>
ivashkevich 03.08.2018 в 15:31
  1. Перед аргументами методов нужно указывать их тип.
  2. return в конструкторе не нужен.
  3. Геттеры не должны ничего изменять у объекта, в нашем случае даже не должны принимать никаких аргументов.
  4. Свойство weight стоит тоже сделать приватным и задаваться через сеттер, а доступ извне должен обеспечиваться через геттер.
computerix 30.08.2018 в 10:31
<?php
class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ',' . 'Мой цвет '. $this->color . '.';
    }

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

    public function getColor(): string
    {
        return $this->color;
    }
}
$cat1 = new Cat('Снежок','белый');
$cat1->sayHello(); 
$cat2 = new Cat('Барсик','рыжий');
$cat2->sayHello();
?>
ivashkevich 01.09.2018 в 13:29

Отлично

artemjeka 12.09.2018 в 09:49

Случайно два сообщения написал) ДЗ:

artemjeka 12.09.2018 в 09:50

1

public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.';
        echo '<br>';
        echo 'Мой цвет ' . $this->color . ').';
    }

2

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

3

public function getColor(): string // возвращяемое значение будет строкой
    {
        return $this->color;
    }

4

*Не думаю что стоит)*

5

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');

$cat1->sayHello();
$cat2->sayHello();

6 Спасибо!

ivashkevich 22.09.2018 в 10:08

Отлично!

jeeree 12.09.2018 в 13:44
class Cat
{
    public function __construct(string $name, $color, float $weight)
    {
        $this->name = $name;
        $this->color = $color;
        $this->weight = $weight;
    }
    private $name;
    private $color;
    private $weight;

    public function sayHello()
    {
        echo 'Дароу! My name is ' . $this->name . ', i have ' .
            $this->color . ' color and i weight ' . $this->weight . ' kilograms.','<br>';
    }
    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
    public function setWeight(float $weight)
    {
        $this->weight = $weight;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function getColor(): string
    {
        return $this->color;
    }public function getWeight(): float
{
    return $this->weight;
}
}
$cat1 = new Cat('Тупой и пакостный ИШАК', 'white', "5.3");
$cat1->sayHello();
jeeree 12.09.2018 в 13:45

все таки не совсем врубаюсь зачем мы прописывали сеттеры и геттеры, если все параметры задаются через конструктор, и для чего их можно использовать
пойду дальше по курсу, мб позже до меня дойдёт)

artemjeka 14.09.2018 в 16:03

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

ivashkevich 22.09.2018 в 10:10

Все верно =)

DmitryGavrilov 13.09.2018 в 08:59
<?php

class Cat {
    private $name;
    private $color;

    public function __construct(string $name, string $color) {

        $this->name = $name;
        $this->color = $color;
    }

    public function SayHello(){
        echo 'Привет! Меня зовут ' . $this->name . '.' . '<br>' . 'мой цвет ' . $this->color . '.';

    }

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

    public function setColor (string $color) {
        $this->color = $color;
    }

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

    }

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

$cat1 = new Cat('Маленький пушистый монстр', 'Ультрамарин');
$cat1->setName('Пушистый монстр');
$cat1->setColor('Ультрафиолетовый');
echo  $cat1->SayHello();

?>
ivashkevich 22.09.2018 в 10:10

Супер! Только имена методов всегда с маленькой буквы.

DmitryGavrilov 22.09.2018 в 22:49

Будет сделано Джеди-Мастер

Benya 28.09.2018 в 20:21
<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ','  . ' у меня  ' . $this->color . ' цвет' . '<br>';
    }

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

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

$cat1 = new Cat('Буся', 'желтый');
$cat1->sayHello();
$cat1 = new Cat('Снежек', 'белый');
$cat1->sayHello();
$cat1 = new Cat('Барсик', 'рыжый');
$cat1->sayHello();
ivashkevich 28.09.2018 в 23:14

Отлично!

SBTesla 03.10.2018 в 12:48
<?php

class Cat {

     private $name;
     private $color;
     private $weight;

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

     public function sayHello () {
          echo 'Превет! меня зовут ' . $this -> name . ' моя шерстка  ' . $this -> color . ' и  вешу я столько: ' . $this ->weight . '<br>';
     }
     public function  setName(string $name)
     {
          $this ->name = $name;
     }
     public function setColor(string $color)
     {
          $this->color = $color;
     }
     public function setWeight(float $weight)
     {
          $this->weight = $weight;
     }

     public function getName():string {
          return $this -> name;
     }
     public function getColor():string
     {
          return $this-> color;
     }
     public function getWeight():float
     {
          return $this-> weight;
     }

}
// создаем первый обьект
$cat1 = new Cat ('снежок', 'белый', '10');
$cat1->sayHello();
// создаем 2 обьект
$cat2 = new Cat('барсик', 'синий', '20');
$cat2->sayHello();

поправил

ivashkevich 04.10.2018 в 07:17

Потому что название конструктора начинается с двух подчеркиваний. Замечания:

  1. Слишком много очевидных комментариев.
  2. Коммент "передаем в обьект нужные нам параметры" не имеет никакого отношения к коду, над которым он написан
  3. Коммент "пердаем в параметр обьектов строку с свойствами" вообще бессмысленный - у объектов есть свойства, в которые можно что-то присвоить. У них нет никаких параметров.
  4. Коммент "получаем напрямую свойства приватного обьекта" - не бывает никаких приватных объектов! Где вы взяли эти формулировки?
  5. Конструкции вида $x->y не должны иметь никаких пробелов!
EWA 22.10.2018 в 22:24

Конструктор котиков)

<html>
<head>
<title>Конструктор котиков</title>
<body>
<h2>Соберите котика</h2>
<form action="index.php" method="post">

<label>Кот 1 </label><select name="cat1">
<option value="Tuzik">Tuzik</option>
<option value="Barsik">Barsik</option>
<option value="Snejok">Snejok</option>
</select>
<select name="color1">
<option value="Белый">Белый</option>
<option value="Черный">Черный</option>
<option value="Желтый">Желтый</option>
</select>

<br><br>

<label>Кот 2 </label><select name="cat2">
<option value="Tuzik">Tuzik</option>
<option value="Barsik">Barsik</option>
<option value="Snejok">Snejok</option>
</select>
<select name="color2">
<option value="Белый">Белый</option>
<option value="Черный">Черный</option>
<option value="Желтый">Желтый</option>
</select>
<input type="submit" value="С О Б Р А Т Ь">
</form>
</body>
</head>
</html>
<?php
class Cat
{
private $name;
private $color;
public function __construct(string $name, string $color)
{
    $this->name = $name;
    $this->color = $color;
}
 public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ' и мой цвет ' . $this->color . '.';
    }
public function getName()
    {
        return $this->name;
    }
    public function getColor()
    {
        return $this->color;
    }

}
if($_POST){
$cat1 = new Cat($_POST['cat1'], $_POST['color1']);
$cat1-> sayHello();
echo '<br>';
$cat2 = new cat($_POST['cat2'], $_POST['color2']);
$cat2-> sayHello();
}
?>
ivashkevich 23.10.2018 в 08:45

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

EWA 23.10.2018 в 10:00

Спасибки. Подправил.

ivashkevich 23.10.2018 в 23:19

Отлично

zebra 04.11.2018 в 00:29

Домашка:

<?php 
class Cat {
    private $name;
    private $color;

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

    public function sayHello() {
        echo 'Привет! Меня зовут ' . $this->name . ' ' . 'и мой цвет ' . $this->color;
    }

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

    public function setColor(string $color) {
        $this->color = $color;
    }

    public function getName(): string { //явное указание типа возвращаемого значения
        return $this->name;
    }

    public function getColor(): string {
        return $this->color;
    }
}
$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');

$cat1->sayHello();
echo '<br>';
$cat2->sayHello();
// echo $cat1->getName();

?>
ivashkevich 04.11.2018 в 00:34

Отличная домашка!
P.S. В PHP принято открывающую скобку тела функции переносить на следующую строку.

function func(): void
{ // вот сюда
Todd 04.11.2018 в 17:51
<?php
class Cat {
    private $name;
    private $color;

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

    public function sayHello() {
        echo 'Привет! Меня зовут ' . $this->name . '. Мой цвет ' . $this->color . ' !';
    }

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

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

    public function setColor(string $color) {
        $this->color = $color;
    }

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

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');

echo $cat1->sayHello();
echo $cat2->sayHello();
?>
ivashkevich 04.11.2018 в 18:25

Хорошо. Для функций, которые ничего не возвращают стоит указывать return-type void. Открывающая скобка тела функции переносится на следующую строку (смотрите комментарий выше).

argon2i 25.11.2018 в 22:08

Для функций, которые ничего не возвращают стоит указывать return-type void.
Это для каких конкретно?

ivashkevich 26.11.2018 в 09:58

У которых после return ничего нет, либо у которых вообще отсутствует return =)

Moskva 05.11.2018 в 18:14

Очень похоже на ООП из С++, помню в университете проходили целый семестр классы, были некоторые вопросы не понятны, сейчас вроде стало намного понятнее с геттерами и сеттерами.

<?php   
    class Cat // создание класса кот
    {
        private $name; 
        private $color;
        public $weight;
        //конструктур принято объявлять в начале класса
        public function __construct(string $name, string $color)
        {
            $this->name = $name;
            $this->color = $color;
        }
        public function sayHi()
        {
            echo 'Привет! Меня зовут ' . $this->name . ', ' .'моя шерсть цвета: '.  $this->color . '.' . '<br>';
        }
        public function setName(string $name)
        {
            $this->name = $name;
        }
        public function getName(): string
        {
            return $this->name;
        }
        public function setColor(string $color)
        {
            $this->color = $color;
        }
        public function getColor(): string
        {
            return $this->color;
        }

    }
    $cat1 = new Cat('Снежок', 'белый');
    $cat1->setName('Снежок'); //можем изменить значение
    $cat1->setColor('Черный'); //можем изменить значение
    $cat1->sayHi();

    $cat2 = new Cat('Барсик', 'Рыжий');
    $cat2->setName('Котяра'); //можем изменить значение
    $cat2->setColor('Белый'); //можем изменить значение
    $cat2->sayHi();

 ?>
ivashkevich 05.11.2018 в 21:54

Хорошо, но public $weight; - лишнее.

stokato 05.11.2018 в 20:52

Дополните метод sayHello(), чтобы котики после того, как назвали своё имя, говорили о том, какого они цвета.
Сделайте свойство color приватным и добавьте в конструктор ещё один аргумент, через который при создании котика будет задаваться его цвет.
Сделайте геттер, который будет позволять получить свойство color.
Подумайте, стоит ли давать возможность менять котикам цвета после их создания? Если вам хватило совести сказать да - добавьте ещё и сеттер для этого свойства. Это вам в наказание - хорошие люди котов не перекрашивают.
Создайте теперь белого Снежка и рыжего Барсика и попросите их рассказать о себе.

<?php
class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут, ' . $this->name . '.<br>';
        echo 'У меня цвет ' . $this->color . '.<br>';
        echo 'Я вешу ' . $this->weight . '.<br>';
    }

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

    public function setWeight(float $weight)
    {
        $this->weight = $weight;
    }

    public function getWeight(): float
    {
        return $this->weight;
    }
}

$cat = new Cat('Снежок', 'white', 3.5);
$cat->sayHello();

$cat2 = new Cat('Барсик', 'red', 6.2);
$cat2->sayHello();
ivashkevich 05.11.2018 в 21:54

Отлично!

bildep 18.11.2018 в 14:29
<?php

class Cat
{
    private $name;
    private $color;
    public $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.';
        echo ' Мой цвет ' . $this->color . '.';
    }

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

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

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

$cat1 = new Cat('Снежок', 'белый');
$cat1->sayHello();

$cat2 = new Cat('Барсик', 'рыжий');
$cat2->sayHello();
ivashkevich 19.11.2018 в 21:33

Хорошо.

ilyaOrlov 24.11.2018 в 17:55
<?php
class Cat {
    private $name;
    private $color;
    public $weight;
    public function __construct(string $name, string $color) {
        $this -> name = $name;
        $this -> color = $color;
    }
    public function sayHello() {
        if ((substr($this -> color, -4, 2)) == 'ы') {
            $i = 'ого';
        } elseif ((substr($this -> color, -4, 2)) == 'и') {
            $i = 'его';
        }
        echo 'Привет! Меня зовут ' . $this -> name . '! И я ' . substr($this -> color, 0, -4) . $i . ' цвета.';
    }
    public function setName(string $name) {
        $this -> name = $name;
    }
    public function getName(): string {
        return $this -> name;
    }
    public function setColor(string $color) {
        $this -> color = $color;
    }
    public function getColor(): string {
        return $this -> color;
    }
}
$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');
$cat1 -> sayHello(); // Привет! Меня зовут Снежок! И я белого цвета.
echo '<br>';
$cat2 -> sayHello(); // Привет! Меня зовут Барсик! И я рыжего цвета.
?>
ivashkevich 24.11.2018 в 21:56

Отлично! Прочитайте еще про mb_substr и про utf-8 в PHP тогда сразу)

Waldemar 29.11.2018 в 09:23

Что-то не пойму, как сюда вставить скан кода))
Пока вставлю текстом:

<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ' и мой цвет '. $this->color . '.<br>';
    }

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

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

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

}

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');

$cat1->sayHello();
$cat2->sayHello();
ivashkevich 29.11.2018 в 10:15

Всё отлично. Для методов, которые ничего не возвращают лучше указывать тип :void. Для форматирования кода используйте самую первую кнопку в редакторе комментария.

Waldemar 29.11.2018 в 10:25

Про void немного непонятно. В моём примере у каких методов надо его добавить?

ivashkevich 29.11.2018 в 10:31

setName или sayHello - методы, у которых после return ничего не указано, или вообще отсутствует return.

Pavel-Tonk 11.12.2018 в 00:48
<?php 
class Cat {
    private $name;
    private $color;
    private $age;
    public function __construct(string $name, string $color, string $age = '11.12.18') 
    {
        $this->name = $name;
        $this->color = $color;
        $this->age = $age;
    }
    public function setName(string $name):void 
    {
        $this->name = $name;
    }
    public function setColor(string $name):void 
    {
        $this->color = $color;
    }
    public function getName():string 
    {
        return $this->name;
    }
    public function getColor():string 
    {
        return $this->color;
    }
    public function getAge():string 
    {
        return $this->age;
    }
    public function sayHello():void
    {
        echo '<p>Мяу! Меня зовут - '.$this->name.'. Мой окрас - '.$this->color.'. Я родился - '.$this->age.'</p>';
    }
}
$cat1 = new Cat('Барсик','рыжий',date("d.m.Y"));
$cat1->sayHello();
$cat2 = new Cat('Cнежок','белый', date("d.M.y", mktime(0, 0, 0, 12, 10, 2018)));
$cat2->sayHello();

Решил вместо массы использовать дату рождения. У меня пара вопросов возникла после прочтения замечаний выше:

  1. Правильно ли я использовал :void?
  2. Нужен ли :void для конструктора?
  3. У меня не получилось записать дефолтное значение аргументу конструктора $age = date("d.m.Y"). Это потому что я не так делаю или так априори синтаксис не позволяет?
ivashkevich 11.12.2018 в 23:02

Привет, все отлично.

  1. Да
  2. Для конструктора не нужно
  3. Синтаксис позволяет. Видимо, что-то не так делал.
CarfikDK 13.12.2018 в 23:20
<?php

class Cat
{
    private $name;
    private $color;
    public $weight;
    public function __construct (string $name, string $color)
    {
        $this->name = $name;
        $this->color = $color;
    }
    public function sayHello()
    {
        echo 'Хелоу, меня зовут ' . $this->name . ', как видишь мой цвет  ' . $this->color . '.' . '<br>';
    }
    public function setName(string $name)
    {
        $this-> name = $name;
    }
    public function setColor(string $color)
    {
        $this-> color = $color;
    }
    public function  getName():string
    {
        return $this->name;
    }
    public function getColor():string
    {
        return $this->color;
    }
}
$cat1 = new Cat('Снежок', 'белый');
$cat1-> sayHello();
$cat1-> setName('Трактор'); //Потомучто громко мурчит =)
$cat1->setColor('Черный');

$cat2 = new Cat ('Барсик', 'рыжий');
$cat2->sayHello();
$cat1->sayHello();
ivashkevich 14.12.2018 в 10:37

Трактор так трактор) Отлично!

[email protected] 20.12.2018 в 13:30
<?php

class Cat
{
    public $name;
    public $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '<br>';
        echo 'Я имею ' . $this->color . ' окрас' . '<br>';
    }

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

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

}

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');

echo $cat1->sayHello();
echo $cat2->sayHello();
ivashkevich 20.12.2018 в 13:32

Отлично!

landialog 31.12.2018 в 19:44
class Cat
{
    private $name;
    private $color;
    private $weight;

    public function __construct($name, $color, $weight)
    {
        $this->name = $name;
        $this->color = $color;
        $this->weight = $weight;
    }

    public function sayHello()
    {
        echo 'Меня зовут '. $this->name. ' мой цвет - '. $this->color. ' мой вес - '. $this->weight;
    }

    public function getColor()
    {
        return $this->color;
    }

}

$cat1 = new Cat('Снежок', 'Белый', 15);
echo '<p>' . $cat1->sayHello();
echo '<br>';
$cat2 = new Cat('Барсик', 'Черный', 12);
echo $cat2->sayHello();

P.S. Что-то где-то пропустил. По поводу указаний типов (string, void) данных. Это обязательно?
В каком уроке можно посмотреть примеры?

ivashkevich 01.01.2019 в 17:56

Привет. Обязательно. Урок про функции.

Bogdan 02.01.2019 в 15:59

Дополните метод sayHello(), чтобы котики после того, как назвали своё имя, говорили о том, какого они цвета.

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.' . ' Мой цвет ' . $this->color . '.';
    }

Сделайте свойство color приватным и добавьте в конструктор ещё один аргумент, через который при создании котика будет задаваться его цвет.

private $name
private $color;

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

Сделайте геттер, который будет позволять получить свойство color.

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

Подумайте, стоит ли давать возможность менять котикам цвета после их создания? Если вам хватило совести сказать да - добавьте ещё и сеттер для этого свойства. Это вам в наказание - хорошие люди котов не перекрашивают.

p.s коты стареют и выцветают :D

    private $color;

    public function setColor(string $color)
    {
        $this->color = $color;
    }

Создайте теперь белого Снежка и рыжего Барсика и попросите их рассказать о себе.

$catSnejok = new Cat('Снежок', 'белый');
$catBarsik = new Cat ('Барсик', 'рыжий');

$catSnejok->sayHello();
$catBarsik->sayHello();
ivashkevich 02.01.2019 в 21:45

Отлично! =)

axelstx 28.01.2019 в 19:50
<?php
class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ' и мой цвет ' . $this->color . '.';
    }

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

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

}

$cat1 = new Cat('Снежок', 'белый');
$cat1->sayHello();
echo PHP_EOL;
$cat2 = new Cat('Барсик', 'рыжий');
$cat2->sayHello();
?>
ivashkevich 29.01.2019 в 07:10

Отлично!

excent63 03.02.2019 в 16:42

Добрый день!
Домашнее задание:

<?php
class Cat
{
    private $name;
    private $color;
    public $weight;

    public function __construct(string $name, string $color)
    {
        $this->name = $name;
        $this->color = $color;
    }
    public function sayHello()
    {
        echo 'Привет! Меня зовут '. $this->name . ', ';
        echo 'я ' . $this->color . '.';
        echo '<br>';
    }
    public function setName(string $name, string $color)
    {
        $this->name = $name;
        $this->color = $color;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function getColor(): string
    {
        return $this->color;
    }
}

$cat1 = new Cat('Снежок','белый');
$cat1->weight = '3,5';
$cat1->sayHello();

$cat2 = new Cat('Барсик','черный');
$cat2->setName('Васька','рыжий');
$cat2->weight = '6,2';
$cat2->sayHello();
ivashkevich 04.02.2019 в 00:00

Почему weight - public. И почему это строка, а не число?

excent63 06.02.2019 в 20:57

Исправлено!)

<?php
class Cat
{
    private $name;
    private $color;
    private $weight;

    public function __construct(string $name, string $color, float $weight)
    {
        $this->name = $name;
        $this->color = $color;
        $this->weight = $weight;
    }
    public function sayHello()
    {
        echo 'Привет! Меня зовут '. $this->name . ', ';
        echo 'я ' . $this->color . ', ';
        echo 'мой вес ' . $this->weight . ' кг!';
        echo '<br>';
    }
    public function setName(string $name, string $color, float $weight)
    {
        $this->name = $name;
        $this->color = $color;
        $this->weight = $weight;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function getColor(): string
    {
        return $this->color;
    }
    public function getWeight(): string
    {
        return $this->weight;
    }
    public function setWeight(float $weight): void
    {
        $this->weight = $weight;
    }
}

$cat1 = new Cat('Снежок','белый',3.5);
$cat1->sayHello();

$cat2 = new Cat('Барсик','черный', 6.2);
$cat2->setName('Васька','рыжий', 7.1);
$cat2->sayHello();
ivashkevich 07.02.2019 в 13:50

getWeight() - почему без типа?

excent63 07.02.2019 в 14:11

Пропустил...)

cap 24.02.2019 в 19:10
<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ', ' . 'я ' . $this->color . '.';
    }

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

}

$cat1 = new Cat('Снежок', 'белый');
$cat1->sayHello();
echo '<br>';
$cat2 = new Cat('Барсик', 'черный');
$cat2->sayHello();
echo '<br>';
echo 'цвет первого кота: ' . $cat1->getColor() . '.'; //получает свойство color
echo '<br>';
$cat1 = new Cat('Снежок', 'все еще белый');
$cat1->sayHello();
echo '<br>';
$cat2 = new Cat('Барсик', 'рыжий');
$cat2->sayHello();
ivashkevich 25.02.2019 в 10:35

Отлично! Для сеттеров можно задать тип возвращаемого значения:

function setBlaBla(): void
Evgeny 08.03.2019 в 10:38
<?php

class Cat
{
    private $name;
    private $color;
    public $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ', мой цвет – ' . $this->color . '.<br>';
    }

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

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

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

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');
$cat1->sayHello();
$cat2->sayHello();
ivashkevich 09.03.2019 в 19:30

Отлично! Для методов, которые ничего не возвращают, можно писать тип void:

function func(): void
{
...
[email protected] 15.03.2019 в 17:49
<?php

class Cats
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.';
        echo 'Мой цвет - ' . $this->color . '.';
    }

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

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

}

$barsik = new Cats('Барсик', 'рыжий');
$barsik->setName('Барсик');
$barsik->setColor('рыжий');
$barsik->sayHello();
$snejok = new Cats('Снежок', 'белый');
$snejok->setName('Снежок');
$snejok->setColor('белый');
$snejok->sayHello();
ivashkevich 17.03.2019 в 23:27

Имена классов начинаются с большой буквы. Что такое 2 в названии класса? Вообще ни о чем не говорит. Потом появятся lesson3 и lesson4? Название класса должно отражать его суть. Для чего свойство weight, если оно не используется? Почему оно public?

[email protected] 17.03.2019 в 23:32

Подправил

ivashkevich 18.03.2019 в 00:03

Ок. Только назвать стоит Cat, так как этот класс является описанием одного экземпляра кота.

mitja1211 19.03.2019 в 11:54
class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '. ' . 'Я ' . $this->color;
    }

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

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

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');
echo $cat1->sayHello();
echo $cat2->sayHello();
ivashkevich 19.03.2019 в 23:24

Отлично! Для методов, которые ничего не возвращают, можно писать тип void:

function func(): void
{
...
mitja1211 20.03.2019 в 07:49

Хочу уточнить, речь идёт о методах, у которых отсутствует return? Например: setName

ivashkevich 20.03.2019 в 10:03

Да. Причем не просто return, а именно return "тут что-то есть"
Просто return без аргументов тоже вернёт null.

mitja1211 20.03.2019 в 10:14

Ок, понятно!

Grewi 26.03.2019 в 12:57
class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function sayHello()
    {
        echo '<div> 
                Привет меня зовут - '.$this->name.', цвет моей шубки  '.$this->color.', a вес: '.$this->weight.'кг 
              </div>';
    }

    public function setName(string $name):void
    {
        $this->name = $name;
    }
    public function setColor(string $color):void
    {
        $this->color = $color;
    }
    public function setWeight(float $weight):void
    {
        $this->weight = $weight;
    }

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

$cat1 = new Cat('Снежок','белый',3.5); //Сделали кота
$cat1->setName ('Дружок'); //Переделали кота в собаку
$cat1->setColor('нормальный для собаки');
$cat1->setWeight(10);

$cat1->sayHello();

$cat2 = new Cat('Барсик', 'Рыжий','5'); //Сделали второго кота
$cat2->sayHello();

echo '<div style="margin: 10px; padding: 10px; border: 1px solid #999; color: #444;" >'
    . $cat1->getName().' '.$cat1->getColor()
    .'</div>';
ivashkevich 27.03.2019 в 11:37

Ок, но не надо сюда верстку вставлять. Об этом еще поговорим в следующих уроках.

Boodoo 09.04.2019 в 16:28
<?php
    class Cat
    {
        private $name;
        private $color;

        public function __construct(string $name, string $color)
        {
            $this->name = $name;
            $this->color = $color;
        }
        public function sayHello()
        {
            echo 'Привет! Меня зовут ' . $this->name . ', мой цвет ' . $this->color . '.';
        }
        public function setName(string $name)
        {
            $this->name = $name;
        }
        public function getName() : string
        {
            return $this->name;
        }
        public function setColor(string $color)
        {
            $this->color = $color;
        }
        public function getColor() : string
        {
            return $this->color;
        }
    }

    $cat = new Cat('Снежок', 'белый');
    $cat2 = new Cat('Барсик', 'рыжий');
    $cat->sayHello();
    $cat2->sayHello();
ivashkevich 09.04.2019 в 20:57

Отлично

polvanovv 17.04.2019 в 17:03
<?php
class Cat
{
    private $name;
    private $color;
    public $weight;

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

    public  function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.' . '<br>';
        echo 'Мой окрас - ' . $this->color . '.' . '<br>';
    }
    public function setName(string $name)
    {
      $this->name = $name;
    }
    public function getName(): string
{
    return $this->name;
}

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }
}

$cat1 = new Cat('Снежок','Белый' );
echo $cat1->sayHello();

$cat2 = new Cat('Барсик', 'Рыжий');
echo $cat2->sayHello();

$cat2->setColor('Розовый');
$cat2->sayHello();
ivashkevich 17.04.2019 в 22:25

public $weight; - это для чего? Почему public?

polvanovv 18.04.2019 в 05:34

Этот код я не использовал, но он может пригодиться одному из потомков)
Как определить какое свойство сделать приватным а какое публичным?

ivashkevich 18.04.2019 в 07:31

Если вы не хотите, чтобы свойство было доступно извне - то точно не public. Если хотите, чтобы к нему можно было обращаться в объектах дочерних классов - protected. Во всех остальных случаях используйте по умолчанию private.

Dram 28.04.2019 в 13:06

Я смотрю до ООП дошли не все бойцы :))) комментов слало меньше ))
Итак домашка №1

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.<br>' ;
        echo 'я ' . $this->color . ' цвета!<br>' ;
    }
Dram 28.04.2019 в 13:12

№2

<?php
class Cat
{
    public $name;
    private $color;
    public $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.<br>' ;
        echo 'я ' . $this->color . ' цвета.<br>' ;
    }
}

$cat1 = new Cat('белого');
$cat1->name = 'Снежок';
$cat1->weight = 3.5;

$cat2 = new Cat('черного');
$cat2->name = 'Барсик';
$cat2->weight = 6.2;
ivashkevich 29.04.2019 в 11:40

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

Dram 28.04.2019 в 13:17

№3

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

+

echo $cat1->getColor();
ivashkevich 29.04.2019 в 11:40

Ок

Dram 28.04.2019 в 13:26

№4

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.<br>' ;
    }
    public function getColor(): string
    {
        return $this->color;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
$cat1 = new Cat('белого');
$cat1->name = 'Снежок';
$cat1->weight = 3.5;
$cat1->setColor('за то, что насцал в ботинки перекрашен в ЗЕЛЕНЫЙ!');

$cat1->sayHello();
echo $cat1->getColor(). "<br>";

Вопрос - почему ошибка с echo $cat1->setColor(). "<br>"; ??
Правильно ли я понимаю что если имеется сеттер для этого же свойства, то он всегда перезаписывает геттер?

ivashkevich 29.04.2019 в 11:42

Не понял вашего вопроса. Звучит, как будто не до конца разобрались в том, что происходит

Dram 28.04.2019 в 14:02

№5

<?php
class Cat
{
    public $name;
    private $color;
    public $weight;

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

    public function sayHello()
    {
        echo "Привет! Меня зовут " . $this->name . ", я вешу " . $this->weight. " кг. Моя шерсть ". $this->color. " цвета!<br>" ;

    }
    public function getColor(): string
    {
        return $this->color;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
}
$cat1 = new Cat('белого');
$cat1->name = 'Снежок';
$cat1->weight = 3.5;
$cat1->setColor('за то, что насцал в ботинки, ЗЕЛЕНОГО');

$cat2 = new Cat('рыжего');
$cat2->name = 'Барсик';
$cat2->weight = 6.2;

$cat2->sayHello();
$cat1->sayHello();
ivashkevich 10.05.2019 в 13:26

Отлично. Для сеттеров можно прописать тип возвращаемого значения :void

artemship 06.05.2019 в 16:19
<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello(): void
    {
        echo 'Привет! Меня зовут ' . $this->name . '. Я – ' . $this->color . ' котик!<br>';
    }

    public function setName(string $name): void
    {
        $this->name = $name;
    }

    public function setColor(string $color): void //Этот сеттер для нехороших людей :)
    {
        $this->color = $color;
    }

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

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

$catSnegok = new Cat('Снежок', 'белый');
$catBarsik = new Cat('Барсик', 'рыжий');
$catSnegok->sayHello(); //Привет! Меня зовут Снежок. Я – белый котик!
$catBarsik->sayHello(); //Привет! Меня зовут Барсик. Я – рыжий котик!
ivashkevich 10.05.2019 в 13:27

Супер!

XXX 05.06.2019 в 23:34
<?php

class Cat
{
private $name;
private $color;
public $weight;

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

    public function sayHello()
    {
        echo 'Hi! My name is ' . $this->name . ', I am ' . $this->color .'.'. '<br>';
    }

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

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

}

$barsik = new Cat('Barsik', 'red');
$barsik->sayHello();

$marsik = new Cat('Marsik', 'blue');
$marsik->setColor('grey');
$marsik->sayHello();

Наконец-то вернулся к курсу!

ivashkevich 06.06.2019 в 09:33

Откуда public $weight;? Почему он public?

XXX 11.06.2019 в 11:57

Тестировал различный код и нужен был третье свойство. Когда кидал домашку не удалил.)

ivashkevich 11.06.2019 в 13:22

Это полиция неиспользуемого кода. У вас неиспользуемое свойство. На первый раз отпускаем. Но будьте повнимательнее.

Tina 09.06.2019 в 12:37
Домашка 1 урок:

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo '<br>Привет! Меня зовут ' . $this->name . ' и я цвета ' . $this->color;
    }

//    Сеттеры
    public function setName(string $name)
    {
        $this->name = $name;
    }

    public function setColor(string $color): void
    {
        $this->color = $color;
    }

//    Геттеры
    public function getName(): string
    {
        return $this->name;
    }

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

$cat1 = new Cat('Снежок', 'Блонд');
$cat1->sayHello();

$cat2 = new Cat('Барсик', 'Рыжий конопатый');
$cat2->sayHello();
$cat2->setColor(' (Золотой)');
echo $cat2->getColor();
ivashkevich 09.06.2019 в 16:04

Отлично

ashfedor 09.06.2019 в 13:12

Доброго времени суток. Наконец-то добрался до ООП
домашка


class Cat
{
    private $name;
    private $color;

    public function __construct(string $name, string $color)// задаем в конструкторе обязательные свойства имя и цвет
    {
        $this->name=$name;
        $this ->color = $color;
    }

    public function sayHello()
    {
        echo 'Привет меня зовут' . ' ' . $this->name . ' '. 'цвет моей шерсти' . ' ' . $this->color . '.';
    }
    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
    public function getColor(): string
    {
        return $this->color;
    }

}

$cat1 = new Cat('Снежок', 'белый');
$cat1->sayHello();

echo '<br>';
$cat1->setColor('черный');
echo 'Перекрашиваем ' . $cat1->getName() . ' ' . 'в' . ' ' . $cat1->getColor() . '<br>';
$cat1->sayHello();
echo '<br>';
$cat2 = new Cat('Барсик', 'рыжий');
$cat2->sayHello();``
ivashkevich 09.06.2019 в 16:04

И вам доброго. Отлично!

Bocha 13.06.2019 в 13:41

1.

class Cat
{
    private $name;
    public $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ', мой цвет ' . $this->color;
    }

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

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

}

$cat1 = new Cat('Снежок');
$cat1->color = 'белый';

echo $cat1->sayHello();

2.

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ', мой цвет ' . $this->color;
    }

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

}

$cat1 = new Cat('Снежок', 'Белый');

echo $cat1->sayHello();

3.

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

4.
НЕТ!

5.

class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ' мой цвет ' . $this->color . ' я вешу' . $this->weight . ' кг';
    }

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

    public function setWeight(string $weight)
    {
        $this->weight = $weight;
    }

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

$cat1 = new Cat('Снежок', 'Белый', ' 3.6');
$cat2 = new Cat('Барсик', 'Рыжий', ' 3.0');
$cat1->sayHello();
echo '<br>';
$cat2->sayHello();
ivashkevich 13.06.2019 в 19:51

Но сеттер для цвета всё же добавили)

esqrx 18.06.2019 в 20:05

// 1

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.' . ' , мой цвет - ' . $this->color;
    }
ivashkevich 19.06.2019 в 18:19

Отлично!

rpash151 22.06.2019 в 13:38
<?php

class Cat
{
    private $name;
    private $color;
    public $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ', '.'я имею '.$this->color.' окрас';
        echo '<br>';
    }

    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
    public function getColor(): string
    {
        return $this->color;
    }
}

$cat1 = new Cat('Снежок','Белый');
//$cat1->setName('Снежок');
//$cat1->setColor('Оранжевый');
$cat1->weight = 3.5;
$cat1->sayHello();
$cat1->getName();

$cat2 = new Cat('Барсик','Рыжий');
//$cat2->setName('Пушок');
//$cat2->setColor('Коричневый');
$cat2->weight = 2.5;
$cat2->sayHello();
ivashkevich 23.06.2019 в 17:47

Что это у вас weight наружу торчит? Почему public?

Moskva 29.06.2019 в 14:52
<?php

class Cat
{
    private $name;
    private $color;
    public $weight;

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

    public function sayHello()
    {
        echo 'Привет, меня зовут ' . $this-> name . '. ' . 'Цвет моей шерсти ' . $this->color . '.';
    }

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

}

$cat1 = new Cat('Снежок', 'белый');

$cat1->weight = 2.3;
$cat1->sayHello();
$cat1->setColor('чёрный');// перекрашиваем 1-го котика

$cat2 = new Cat('Барсик' , 'рыжий');
$cat2->weight = 2.9;
$cat2->setColor('серый');// перекрашиваем 2-го котика
$cat2->sayHello();
ivashkevich 30.06.2019 в 15:03

Почему weight у вас public? И почему его нет в конструкторе. Можно создать кота без веса. Это неправильно.

Moskva 03.07.2019 в 13:40

В задании ничего не было связано с weight, к концу урока он тоже не изменился и был public, поэтому не трогал его. Ну, ладно, поправки сделал как у ребят, которые сделали задание правильно.

class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function sayHello()
    {
        echo 'Привет, меня зовут ' . $this-> name . '. ' . 'Цвет моей шерсти ' . $this->color . '.';
    }

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

    public function setWeight(){
        $this->weight = $weight;
    }

    public function getWeight(): float{
        return $this->weight;
    }
}

$cat1 = new Cat('Снежок', 'белый', 3.9);
$cat1->sayHello();
$cat1->setColor('чёрный');// перекрашиваем 1-го котика

$cat2 = new Cat('Барсик' , 'рыжий', 2.9);
$cat2->setColor('серый');// перекрашиваем 2-го котика
$cat2->sayHello();
ivashkevich 03.07.2019 в 19:24

Отлично

[email protected] 02.07.2019 в 14:29
<?php

class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.' . '  И я ' . $this->color . '. ' . 'Я вешу ' . $this->weight . ' кг.' . '<br>';
    }

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

    public function  setColor(string $color)
    {
        $this->color = $color;
    }

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

$cat1 = new Cat('Снежок', 'белый', '5.4');
$cat1->sayHello();

$cat2 = new Cat ('Барсик', 'рыжий', '7');
$cat2->sayHello();

$cat1->setName('Саня');
$cat1->setColor('бритый');
$cat1->sayHello();
ivashkevich 02.07.2019 в 16:32
$cat1-> sayHello();

Тут не нужны пробелы

Bizzzon 14.07.2019 в 21:41
<?php
class Cat
{
private $name;
private $color;
public function __construct(string $name, $color)
{
$this->name = $name;
$this->color = $color;
}

public function sayHello()
{
echo 'Привет! Меня зовут ' . $this->name . '.';
echo "</br>";
echo 'Мой цвет - ' . $this->color . '.';
}

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

public function getName(): string
{
return $this->name;
}
public function getColor() : string
{
return $this->color;
}
}
$cat1 = new Cat('Снежок', 'белый');
echo $cat1->sayHello();
echo "</br>";
$cat2 = new Cat('Барсик', 'рыжий');
echo $cat2->sayHello();
ivashkevich 15.07.2019 в 04:50

Супер! Только с отступами проблема. Используй Ctrl+Alt+L в phpstorm.

webdev 18.07.2019 в 14:44

ДЗ

<?php
class Cat
{
    private $name;
    private $color;
    public $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '. Мой цвет '.$this->color.'.';
    }

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

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

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

}
$cat1 = new Cat('Снежок', 'белый');
$cat1->sayHello();
$cat2 = new Cat('Барсик', 'рыжий');
$cat2->sayHello();

Красить кота не рискну)

ivashkevich 18.07.2019 в 19:26

public $weight; - это что? Почему public?

webdev 19.07.2019 в 10:06

В задании же нет прямого указания сделать все свойства приватными.
С другой стороны логичнее сделать приватным все таки это свойство.
Сделал приватным)
Вот сеттер и геттер

public function setWeight(string $weight)
    {
        $this->weight = $weight;
    }

    public function getWeight(): string
    {
        return $this->weight;
    }
ivashkevich 20.07.2019 в 14:47

Ничто не должно быть public, если это не используется вне объектов класса.

webdev 19.07.2019 в 10:10

Кстати, в левой колонке сайта мне пишет предложение о покупке курсов за 1$.
Там кривовато час отображается
До окончания акции:
013:51:06

ivashkevich 20.07.2019 в 14:47

Спасибо

Metey 19.07.2019 в 08:08
<?php
class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ', мой цвет '. $this->color.' и мой вес ' . $this->weight .' кг' ;
    }

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

    public function setWeight(string $weight)
    {
        $this->weight = $weight;
    }

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

$cat1 = new Cat('Снежок', 'белый', 3.5 );
$cat2 = new Cat('Барсик', 'рыжий', 4 );
$speack = 'sayHello';
echo $cat1->$speack() .'<br/>';
echo $cat2->$speack() .'<br/>';
ivashkevich 19.07.2019 в 09:37

Ок. Но не надо заводить переменную с именем метода. Вызывайте сразу по имени напрямую.

Reechniy 19.07.2019 в 16:32
<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет, меня зовут '. $this->name . '. Я ' . $this->color . ".";
    }

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

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

    public function setColor (string $color)
    {
        $this->color = $color;
    }

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

$cat1 = new Cat('Снежок', 'Черный');
$cat2 = new Cat ('Барсик', 'Рыжий');

echo $cat1->sayHello();
echo '<br>';
echo $cat2->sayHello();
ivashkevich 20.07.2019 в 14:39

Супер!

Blook 29.07.2019 в 23:04
class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function sayHello(): string
    {
        echo 'Привет, меня зовут ' . $this->name . '. Мой цвет ' . $this->color;
    }

    public function setName(string $name): void
    {
        $this->name = $name;
    }

    public function setColor(string $color): void
    {
        $this->color = $color;
    }

    public function getName(): string
    {
        return 'Мое имя ' . $this->name;
    }

    public function getColor(): string
    {
        return 'Мой цвет ' . $this->color;
    }

}

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');

echo $cat1->getName() . '. ' . $cat1->getColor() . '.';
echo '<br>';
echo $cat2->getName() . '. ' . $cat2->getColor() . '.';
ivashkevich 30.07.2019 в 09:06

public $weight; - это что такое?

Методы, которые ничего не возвращают, можно описать как возвращающие :void

Blook 31.07.2019 в 08:45

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

gruimed 03.08.2019 в 21:21
<?php

class Cat {

    private $name;
    private $color;

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

    public function sayHello()
    {
        echo " Mew! \n My name is {$this->name}. \n My fur is {$this->color}. \n";
    }

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }
    public function getColor(): string
    {
        return $this->color;
    }
}

$cat1 = new Cat('Argo', 'orange');
$cat1->sayHello();

$cat2 = new Cat('Begemot', 'black');
$cat2->sayHello();
ivashkevich 04.08.2019 в 04:40

Супер!

Pro100Bah 02.09.2019 в 10:49

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Меня зовут ' . $this->name . ', цвет шерсти у меня ' . $this->color;
    }

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

$cat1 = new Cat('Тима', 'Белый');
$cat2 = new Cat('Барсик', 'Рыжий');
$cat1->sayHello();
echo '<br>';
$cat1->setName('Снежок');
$cat1->setColor('зеленый, не бывает таких котиков хозяин');
$cat1->sayHello();
echo '<br>';
$cat2->sayHello();
ivashkevich 02.09.2019 в 18:37

Отлично

Dreft 04.09.2019 в 20:20
<?php

class Cat
{
    private $name;
    private $color;
    public $weight;

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

    public function sayHello()
    {
        echo 'Привет, меня зовут ' . $this->name . ' Мой цвет -  ' . $this->color . ' Мой вес - ' . $this->weight . "<br>";

    }

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

    public function setWeight(string $weight)
    {
        $this->weight = $weight;
    }

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

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

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

$cat1 = new Cat('Снежок', 'Белый', 23.5);
$cat1->setName('Снежинка');
$cat1->setColor('Черный');
$cat1->sayHello();
echo "<br>";
$cat2 = new Cat('Барсик', 'Рыжий', 100);
$cat2->setName('Тигр');
$cat2->setColor('Красный');
$cat2->sayHello();
ivashkevich 04.09.2019 в 21:26

public $weight; - почему public?

Dreft 04.09.2019 в 21:29

я так и не понял, когда и какой модификатор ставить

ivashkevich 05.09.2019 в 05:41

Почитай в официальной документации, может там понятнее

[email protected] 29.09.2019 в 16:44
<?php

class Cat
{
    private $name;
    private $color;
    public $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ','.'я '.' '.$this->color.'.';
    }

    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function getName(): string
    {
        return $this->name;
    }
public function getColour(): string {
        return $this->color;
}
public function setColour(string $colour){
        $this->color=$colour;
}
}

$cat=new Cat('Снежок','белый');
$cat1=new Cat('Барсик','рыжий');
echo $cat1->sayHello().'<br>';
echo $cat->sayHello();
ivashkevich 30.09.2019 в 00:35

public $weight; - это что? Почему public?

getColour(): string {
        return $this->color;

Почему свойство color а метод getColour?

Скобка, открывающая тело метода, переносится на следующую строку.

[email protected] 30.09.2019 в 08:56

Понял, public $weight с задачек по курсу,нужно было не паблик,а протектед, имя метода невнимательно писал,всё понял,принял,исправлюсь.

ivashkevich 01.10.2019 в 12:30

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

dliashchenko 06.10.2019 в 22:28
<?php
class Cat
{
    private $name;
    private $color;
    public function __construct(string $name, string $color)
    {
        $this->name = $name;
        $this->color = $color;
    }

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '. <br/>';
    }
    public function sayColor()
    {
        echo 'Мой цвет ' . $this->color . '. <br/>';
    }

    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function getColor(): string
    {
        return $this->color;
    }

}

$cat1 = new Cat('Снежок', 'Белый');
$cat1->sayHello();
$cat1->sayColor();

$cat2 = new Cat('Барсик', 'Рыжий');
$cat2->sayHello();
$cat2->sayColor();

Сперва не понял про что. Теперь понял и исправил.

ivashkevich 07.10.2019 в 09:58

Окей. А почему через конструктор не задаешь?

H3licoptero 22.10.2019 в 12:48
class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Мяу! Меня зовут ' . $this->name . '.' . ' И я - ' . $this->color . ' котик.';
    }

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

}

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Брасик', 'рыжий');

$cat1->setColor('зелёный');

$cat1->sayHello();
echo '<br>';
$cat2->sayHello();
echo '<br>';

echo $cat1->getColor();
echo '<br>';
echo $cat2->getColor();
ivashkevich 22.10.2019 в 13:36

Отлично

TheTigra 04.11.2019 в 16:33

Домашка:

<?
class Cat {
    private $name;
    private $color;
    public $weight;
    public function __construct(string $name, string $color)
    {
        $this->name = $name;
        $this->color = $color;
    }
    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '. Мой цвет - '.$this->color;
    }
    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function setColor(string $color)
    {
        $this->color=$color;
    }
    public function getColor(): string
    {
        return $this->color;
    }
}
$cat1 = new Cat('Снежок', 'Белый');
$cat1->sayHello();

$cat2 = new Cat('Барсик', 'Полосатый');
$cat2->sayHello();
?>
ivashkevich 04.11.2019 в 19:43

public $weight; - это что?

AleksandrNenashev 13.12.2019 в 01:48

Здравствуйте, никто не указал ошибку или у всех срабатывает public function getName(): string ?

ivashkevich 14.12.2019 в 15:25

Выберите в OpenServer версию PHP >=7.1

andreskrip 20.12.2019 в 01:31

При написании кода PHPStorm предложил мне автозаполнение при написании setName и getName и в комментариях перед методами написал для сеттера:

/**
* @param mixed $name
*/

и для геттера:

/**
* @return mixed
*/

Нужно ли это использовать?
И, собственно, сама дз:

<?php

class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function setName(string $name): void
    {
        $this->name = $name;
    }

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

    public function setColor(string $color): void
    {
        $this->color = $color;
    }

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

    public function setWeight(float $weight): void
    {
        $this->weight = $weight;
    }

    public function getWeight(): float
    {
        return $this->weight;
    }

    public function sayHello()
    {
        echo 'Привет, меня зовут ' . $this->name . '. Мой цвет - ' . $this->color . '. Я вешу ' . $this->weight . ' кг.';
    }
}

$cat1 = new Cat('Снежок', 'белый', 6.2);
$cat2 = new Cat('Барсик', 'рыжий', 1337);
echo $cat1->sayHello();
echo '<br>';
echo $cat2->sayHello();
ivashkevich 21.12.2019 в 20:13

Отлично. PhpDoc в случае, когда у вас прямо в коде указаны и типы аргументов, и тип возвращаемого значения, не нужен.

[email protected] 30.12.2019 в 20:23
class Cat
{
    private $name;
    private $color;
    public $weight;

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

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

    public function sayHello()
    {
        echo 'Мяу, привет! Меня зовут ' . $this->name . '.' . ' Я имею ' . $this->color . ' цвет.';
        echo '<br />';
    }

}

$catVasia = new Cat('Василий', 'рыжий');
$catVasia->setName('Гоша');
$catVasia->setColor('зеленый');
$catVasia->weight = '3.5 кг.';
$catVasia->sayHello();

$catBarsik = new Cat('Барсик', 'черный');
$catBarsik->setName('Афанасий');
$catBarsik->setColor('пурпурный');
$catBarsik->weight = '3 кг.';
$catBarsik->sayHello();
ivashkevich 03.01.2020 в 03:50

А чего это у вас weight public? Должно быть единообразно всё.

[email protected] 20.01.2020 в 19:41

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

Какая идет защита, если я обращаюсь к публичному методу, или к публичной переменной, ведь в итоге и там и там я получу одно значение?

ivashkevich 21.01.2020 в 06:50

В сеттере во-первых ограничивается тип задаваемого значения. То есть в свойство, в котором должно быть число, не запихнуть строку. Во-вторых, в сеттере могут быть другие валидации (например, число может быть в промежутке от 60 до 100), приведения (хранимое значение в БД будет отличаться от того, с которым удобнее работать в коде). В геттере тоже могут быть как привидения, так и реализация LazyLoad. Всё это будет в следующих уроках.

kvakazuabr 21.01.2020 в 00:42
class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '. Мой цвет ' . $this->color . '.';
    }

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

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

$snow = new Cat('Снежок', 'белый');
$bapsik = new Cat('Барсик', 'рыжий');
$snow->sayHello();
$bapsik->sayHello();
ivashkevich 21.01.2020 в 06:51

Отлично

YuraG 02.02.2020 в 20:41
<?php
class Cat
{
    private $name;
    private $color;
    public $weight;

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

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

    public function sayHello(): void
    {
        echo 'Привет! Меня зовут ' . $this->name
            . '.<br>Мой цвет  ' . $this->color . '.';
    }

    public function setName(string $name): void
    {
        $this->name = $name;
    }

}

$barsik = new Cat('барсик', 'рыжый', 5);
$snejok = new Cat('cнежок', 'белый', 3.5);

$barsik->sayHello();
echo $barsik->getColor();

echo '<br><br>';
$snejok->sayHello();
ivashkevich 04.02.2020 в 13:10
    public $weight;

Почему public?

YuraG 04.02.2020 в 18:49

Не понял вопрос ?
что должно быть там ? private ?

ivashkevich 06.02.2020 в 02:56

Вы должны самостоятельно ответить на этот вопрос после изучения темы модификаторов доступа. Для чего вы написали public?

YuraG 06.02.2020 в 07:52

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

....
private $name;
private $color;
private $weight;
....
ivashkevich 11.02.2020 в 14:59

Правильно

Lungren 09.03.2020 в 13:51
<?php
class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.'.' Я '. $this->color . ' цвета и вешу '. $this->weight.' килограмм'.'.';
    }

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

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

    public function getWeight(): string
    {
        return $this->weight;
    }
}
$cat1 = new Cat('Снежок','белый','3.5');

$cat2 = new Cat('Барсик','рыжий','6.2');

echo '<br />';

$cat1->sayHello();
echo '<br />';
$cat2->sayHello();
ivashkevich 10.03.2020 в 16:38

Почему вместо числовых значений используете строки?

Salexandr 12.03.2020 в 22:45
class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут, ' . $this->name . '.';
        echo '<br>';
        echo 'Мой цвет: ' . $this->color . '.';
        echo '<br>';
    }

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

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');
echo $cat1->sayHello();
echo $cat2->sayHello();
ivashkevich 14.03.2020 в 20:18

Отлично

Dimitry 01.04.2020 в 15:35
<?php
class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ', и мой цвет:'. $this->color.'.';
    }

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

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

$cat1= new Cat('Снежок', 'Белый');
$cat2= new Cat('Барсик', 'Рыжий');

$cat1->sayHello();
echo "<br>----------------------------------------------------<br>";
$cat2->sayHello();

Доброго времени суток!
это мое дз

ivashkevich 01.04.2020 в 18:08

Отлично!

Dmitry.Dudin 05.04.2020 в 17:55
<?php
header('Content-Type: text/html; charset=utf-8');

class Cat{
    private $name;
    private $color;

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

    public function sayHello(){
        echo 'Hello, my name is '.$this->name.', i am '.$this->color.' color';
    }
    public function getColor():string {
        return $this->color;
        }
        public function setColor($color){
            return $this->color=$color;
        }
}

$cat1= new Cat('Снежок','Белый');
$cat2= new Cat('Барсик','Рыжий');
$cat1->sayHello();
echo '</br>';
$cat2->sayHello();
ivashkevich 05.04.2020 в 19:29
header('Content-Type: text/html; charset=utf-8');

Не нужно

public function __construct(string $name,$color){

{ - на новой строке

В целом все ок, но форматирование подводит. Используйте CTRL+ALT+L в PhpStorm

[email protected] 05.04.2020 в 21:35

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

<?php
class Cat
{
    public $name;
    public $color;
    public $weight;

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name .' '. $this->color .'.'.'<br>';
    }
}
$cat1 = new Cat();
$cat1->name = 'Снежок';
$cat1->color = 'белый';
$cat1->sayHello();

$cat2 = new Cat();
$cat2->name = 'Барсик';
$cat2->color = 'красный';
$cat2->sayHello();

class Cat2
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name .' '. $this->color .'.'.'<br>';
    }

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

    public function getName(): string
    {
        return $this->name;
    }
}
$cat3 = new Cat2('Снежок', 'белый');
$cat3->sayHello();
$cat4 = new Cat2('Барсик', 'рыжий');
$cat4->sayHello();
?>
ivashkevich 06.04.2020 в 07:29

Отлично. Но только не надо было скидывать 2 класса, оставьте только последний вариант. Закрывающий тег ?> в конце файла ставить не нужно, прошу запомнить это!

Alexann 08.04.2020 в 15:39
<?php

class Cat
{
    private $name;
    private $color;
    public $weight;

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

    public function seyHello()
    {
        echo "Привет! Меня зовут " . $this->name . "." . PHP_EOL;
        echo 'Мой цвет - ' . $this->color . '.' . PHP_EOL;
    }

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

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

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

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'черный');
$cat2->weight = 2.5;
$cat1->weight = 3.4;

$cat1->seyHello();
$cat2->seyHello();
ivashkevich 08.04.2020 в 19:13

И почему у кота можно вес менять минуя интерфейс? Почему все свойства private, а вес public?

Alexann 08.04.2020 в 21:38

Исправил вот так:

<?php

class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function seyHello()
    {
        echo "Привет! Меня зовут " . $this->name . "." . PHP_EOL;
        echo 'Мой цвет - ' . $this->color . '.' . PHP_EOL;
    }

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

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

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

    public function setWeight(string $weight)
    {
        $this->weight = $weight;
    }

    public function getweight(): float
    {
        return $this->weight;
    }
}

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'черный');
$cat2->setWeight(2.5);
$cat1->setWeight(3.4);

$cat1->seyHello();
$cat2->seyHello();

Либо в конструкторе добавить еще один аргумент - вес.

ivashkevich 09.04.2020 в 10:41

По-хорошему в конструкторе. И на комментарии можно отвечать

Alexann 10.04.2020 в 09:21

Понял.

[email protected] 10.04.2020 в 22:17
<?php

class Cat {

  private $name;
  private $color;
  private $weight;

  public function __construct (string $name, string $color, string $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function sayHello() {
    echo 'Привет! Меня зовут ' . $this->name . '. Я - ' . $this->color . ' котяра. Вес моего тела: ' . $this->weight . 'кг. Спасибо за внимание!!!' . PHP_EOL . PHP_EOL;
  }
  public function getColor() {
    return $this->color;
  }
  public function setColor(string $color) {
    $this->color = $color;
  }
}

$cat1 = new Cat('Снежок', 'Рыжий', '6');
$cat1->setColor('Белый');
$cat1->sayHello();
$cat2 = new Cat('Барсик', 'Рыжий', '5');
$cat2->sayHello();
ivashkevich 11.04.2020 в 21:12

А че вес строкой? Давай float! :)

WarLikeLaux 13.04.2020 в 10:59
<?php

header('Content-Type: text/html; charset=utf-8');

class Cat {

    private $name;
    private $color;
    public $weight;

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

    public function sayHello() {
        echo 'Привет! Меня зовут ' . $this->name . '. Мой цвет - ' . $this->color . '.';
    }

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

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

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

$myCats = [
    new Cat('Снежок', 'белый'),
    new Cat('Барсик', 'рыжий'),
];

foreach ($myCats as $cat) {
    $cat->sayHello();
    echo "<br/>";
}
ivashkevich 13.04.2020 в 14:57

Че это public?

WarLikeLaux 13.04.2020 в 16:59

Это про вес? В задании не надо было с ним ничего делать же.

ivashkevich 14.04.2020 в 16:51

Ну так тем более, что он тут забыл?)

Fill 14.04.2020 в 20:16
<?php

class Cat
{
    private $name;
    private $color; //приватный цвет
//конструктор с цветом
    public function __construct(string $name, string $color)
    {
        $this->name = $name;
        $this->color = $color;
    }

    public $weight;
//Приветсвие с цветом
    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ', мой цвет ' . $this->color . '.';
    }

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

    public function getName(): string
    {
        return $this->name;
    }
//Геттер для цвета
    public function getColor(): string
    {
        return $this->color;
    }
}

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');
$cat1->sayHello();
echo '<br>';
$cat2->sayHello();
ivashkevich 14.04.2020 в 20:23

Отлично. Комментарии слишком очевидные, толку от них нет, лучше не писать такое.

Fill 14.04.2020 в 20:26

Ок, комменты для отсылки к пунктам домашки.

Timurik 19.04.2020 в 13:05

как-то так:

<?php
class Cat
{
    private $name;
    private $color;
    public function __construct(string $name, string $color)
    {
        $this->name = $name;
        $this->color = $color;
    }
    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.' . '<br>';
        echo 'Мой цвет ' . $this->color . '.' . '<br>' . '<br>';
    }
    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function getColor(): string
    {
        return $this->color;
    }

}
$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');
$cat1->sayHello();
$cat2->sayHello();
ivashkevich 19.04.2020 в 15:53

Отлично!

[email protected] 26.04.2020 в 23:20
  public function getName(): string

а что, так можно было?!

studentDev 22.04.2020 в 11:04
<?php
    class Cat
    {
        private $name;
        private $color;
        private $weight;

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

        public function messageMyCat()
        {
            echo '</br>Привет хозяин! Ты назвал меня ->' . $this->name . '!' . 'Я по окраске' . $this->color . ', мой вес составляет' . $this->weight . 'кг';
        }

        public function setColor(string $color): string
        {
            $this->color = $color;
        }

        public function getColor()
        {
            return $this->color;
        }

        public function getName()
        {
            return $this->name;
        }
    }
    //CAT #1
    $cat1 = new Cat('Снежок', 'белый', 3.5);
    $cat1->messageMyCat();
    //CAT #2
    $cat2 = new Cat('Барсик', 'рыжий', 5);
    $cat2->messageMyCat();
ivashkevich 22.04.2020 в 12:11
        public $weight;

Почему это public?

studentDev 22.04.2020 в 14:32

Исправил+

ivashkevich 22.04.2020 в 17:00
public function __construct($name, $color, float $weight)

Почему нет типов аргументов?

echo '</br>Привет хозяин! Ты назвал меня ->' . " $this->name ! Я по окраске - $this->color, мой вес составляет $this->weight кг ";

Строки пишутся в одинарных кавычках. И используйте конкатенацию строк и выражений:

echo 'Привет хозяин! Ты назвал меня' . $this->name . '! Я по окраске - ' . $this->color . ' мой вес составляет' . $this->weight . ' кг';

Ну ёлки-палки, это же самые основы из курса для начинающих. Как можно в курсе ООП так писать? :)

        public function setColor($color): string

Тоже тип аргумента не указали.

[email protected] 26.04.2020 в 22:59
<?php
    class Cat {
        private $name;
        private $color;
        private $weigth;
        public function __construct(string $name, string $color, float $weigth)
        {
            $this->name = $name;
            $this->color = $color;
            $this->weigth = $weigth;
        }
        public function sayHello()
        {
            echo 'Мяу!<br/>';
            echo 'Привет, я '.$this->name.'.<br/>';
            echo 'Я '.$this->color.'.<br/>';
            echo 'Мой вес - '.$this->weigth.' кг.<br/>';
            echo 'Мяу!<br/>';
        }
        public function getColor():string
        {
            return $this->color.'<br/>';
        }
        public function setColor(string $new_color):void
        {
            $this->color = $new_color;
        }
        public function getName():string
        {
            return $this->name.'<br/>';
        }
    }
    $cat = new Cat('Барсик','рыжий',4);
    $cat->sayHello();
    $cat->setColor('серый');
    $cat->getColor();
        echo '<hr/>';
    $cat1 = new Cat('Снежок','белый',3.1);
    $cat1->sayHello();

Это конечный код моей программы. Сначала сделал сам, затем, просмотрев чужие работы и ваши комментарии к ним, исправлял ошибки в ней. Надеюсь, ошибок больше нема, а то уже заколебался носиться и исправлять ошибки.
Были моменты, когда другие в своих программах указывали тип возвращаемых функций, но я посчитал это лишним, ибо свойства объектов с самого начала имеют определённый тип данных, так что смысла в таком исправлении я не увидел. Иду дальше по урокам. Наставляйте меня дальше, мастер.

ivashkevich 27.04.2020 в 19:56
$this -> color = $color;

Это что за пробелы? Их быть не должно.

В сеттере не стоит делать echo.

Чем больше типов указано, тем лучше. Советую указывать тип возвращаемого значения.

[email protected] 27.04.2020 в 20:19

всё исправил. Спасибо :>

ivashkevich 27.04.2020 в 20:22

Не вижу исправлений

[email protected] 27.04.2020 в 20:34

сорри, забыл сохранить изменения и закрыл вкладку. Теперь точно исправил:
убрал пробелы
указал тип возвращаемых данных
убрал echo из сеттера

ivashkevich 27.04.2020 в 20:53

Теперь отлично

titelivus 03.05.2020 в 17:32
<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.';
        echo '<br>';
        echo 'Мой цвет: ' . $this->getColor() . '.';
    }

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

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

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

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');

$cat1->sayHello();
echo '<br><br>';
$cat2->sayHello();
ivashkevich 03.05.2020 в 21:02

Отлично

Vladimir96 06.05.2020 в 01:30
<?php
class Cat 
{
    private $name;
    private $color;
    public $weight;

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

    public function sayHello()
    {
        echo "Привет, меня зовут " . $this->name . ', и мой цвет ' . $this->color;
    }

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

    public function changeColor(string $color)
    {
        $this->color = $color;
    }

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

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

$barsik = new Cat('Барсик', 'рыжий');
$barsik->sayHello();

echo "<br>";

$snezhok = new Cat('Снежок', 'белый');
$snezhok->sayHello();

echo "<br>";

//перекрасим Барсика
$barsik->changeColor('серый');
$barsik->sayHello();
ivashkevich 06.05.2020 в 13:59
    public $weight;

Почему public?

Vladimir96 06.05.2020 в 14:40

Просто никак не использовал, поэтому оставил паблик.

ivashkevich 06.05.2020 в 20:01

Если никак не используется, его нужно удалять, а не public делать

[email protected] 08.05.2020 в 18:23
<?php
class Cat
{
    private $name;
    private $color;
    public $weight;

    public function __construct(string $name)
    {
        $this->name = $name;
    }
    public function sayHello()
    {
        return 'Привет, меня зовут' . ' ' . $this->name . ' ' . 'и я' . ' ' . $this->color . '.';
    }
    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function getColor(): string
    {
        return $this->color;
    }
    public function changeColor(): string
    {

    }
}
$cat1 = new Cat('Барсик');
$cat1->setColor('рыжий');
$cat1->weight = 3.4;
echo $cat1->sayHello() . '<br>';

$cat2 = new Cat('Снежок');
$cat2->setColor('белый');
echo $cat2->sayHello();
ivashkevich 08.05.2020 в 20:32
public $weight

Почему public?

[email protected] 10.05.2020 в 12:38

ПОдумала, что код менять не нужно, ошибку поняла, исправлю.

[email protected] 14.05.2020 в 23:07
class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name .'.'. ' Цвет моей шерсти ' . $this->color.'.'.'<br>';
    }

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

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

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

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');
$cat1->sayHello();
$cat2->sayHello();
ivashkevich 15.05.2020 в 18:28

Отлично

Sviatoslav 16.05.2020 в 19:13

Мой пример

<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '. Мой цвет - ' . $this->color . ". <br>" . "\n";
    }

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

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

$cat3 = new Cat('Том', "серый");
echo $cat3->sayHello();
$cat3->setColor('черный');
$cat3->setName('ЗлойТом');
echo $cat3->sayHello();
$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');
echo $cat1->sayHello();
echo $cat2->sayHello();
ivashkevich 17.05.2020 в 14:54

Отлично!

n.yurasheva 17.05.2020 в 18:37
<?php
class Cat
{
    private $name;
    private $color;
    public function __construct(string $name, string $color)
    {
        $this->name = $name;
        $this->color = $color;
    }
    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '. Мой окрас ' . $this->color . '.<br>';
    }
    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function getColor(): string
    {
        return $this->color;
    }
}
$cat1 = new Cat('Снежок','белый');
$cat1->setName('Снежок');
$cat1->setColor('белый');
//$cat1->name = 'Снежок';
//$cat1->color = 'белый';
$cat1->sayHello();
$cat2 = new Cat('Барсик','рыжий');
$cat2->setName('Барсик');
$cat2->setColor('рыжий');
//$cat2->name = 'Барсик';
//$cat2->color = 'рыжий';
$cat2->sayHello();
ivashkevich 18.05.2020 в 06:08

Отлично!

IePyton 26.05.2020 в 15:40
<?php

class Cat
{
    private $name;
    private $color;

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

    public $weight;

    public function sayHello()
    {
        echo 'Привет, меня зовут ' . $this->name . '.' . ' Мой цвет ' . $this->color;
    }

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

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }
}

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');
$cat1->sayHello();
echo '<br>';
$cat2->sayHello();
ivashkevich 27.05.2020 в 17:56
    public $weight;

Для чего? И почему public?

IePyton 27.05.2020 в 18:03

Для чего? И почему public? - осталось от прошлых манипуляций)

<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет, меня зовут ' . $this->name . '.' . ' Мой цвет ' . $this->color;
    }

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

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }
}

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');
$cat1->sayHello();
echo '<br>';
$cat2->sayHello();
ivashkevich 27.05.2020 в 18:10

Теперь отлично

superbobr 05.06.2020 в 13:43
<?php
class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.' . ' Мой цвет ' . $this->color . '.';
    }

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

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

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

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');

$cat1->sayHello();
$cat2->sayHello();
superbobr 05.06.2020 в 13:54

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

ivashkevich 06.06.2020 в 08:24

Если ipad, то не используйте safari

superbobr 08.06.2020 в 10:32

Спасибо, да все верно, именно такой вариант, попробую другой браузер.

ivashkevich 06.06.2020 в 08:24

Отлично

[email protected] 05.06.2020 в 16:09

Выполнила задание, но с маленьким уточнением: создала один экземпляр класса и попрактиковала магические сеттеры и геттеры, чтобы изменить имя и цвет одному и тому же котику (хотя, конечно, можно было бы просто создать два объекта с требуемыми именами и не мучить виртуальных животных!) ))

<?php
    class Cat 
    {
        private $name;
        private $color;

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

        public function sayHello()
        {
            echo 'Привет! Меня зовут '.$this->name .
            ' и мой цвет '. $this->color.'.';
        }

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

        public function setColor(string $color)
        {
            $this->color=$color;
        }

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

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

    $cat1 = new Cat('Снежок', 'белый');
    $cat1 -> sayHello(); //Привет! Меня зовут Снежок и мой цвет белый.
    var_dump($cat1);
    $cat1 -> setName('Барсик');
    $cat1 -> setColor('черный');
    echo '<br> Результат getName() - '.$cat1->getName().' и getColor() - '.$cat1 -> getColor().'.<br>';
    var_dump($cat1);
    $cat1->sayHello(); //Привет! Меня зовут Барсик и мой цвет черный.
ivashkevich 06.06.2020 в 08:34
$cat1 -> sayHello();

Тут пробелы не нужны. В остальном - отлично!

happyviolence 09.06.2020 в 22:20
<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello ()
    {
        echo 'Привет! Меня зовут ' . $this->name . ', мой цвет ' . $this->color . '.';
    }

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

$cat1 = new Cat('Снежок', 'white');
$cat1->sayHello();

$cat2 = new Cat('Барсик', 'red');
$cat2->sayHello();
ivashkevich 10.06.2020 в 12:29

Супер!

[email protected] 25.06.2020 в 21:55
<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ' и я ' . $this->color . '.';
    }

    public function setColor(string $color)
    {
        $this->color = $color;

    }

    public function getColor(): string
    {
        return $this->color;

    }
}
$cat1 = new Cat('Барсик', 'красный');
$cat2 = new Cat('Кузя', 'серый');
echo $cat1->sayHello();
echo '<br>';
echo $cat2->sayHello();
ivashkevich 26.06.2020 в 09:27

Всё-таки покрасили... Отлично)

[email protected] 01.07.2020 в 10:04
class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ', мой цвет' . $this->color;
    }

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

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

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

$cat1 = new Cat('Снежок', 'Белый');
$cat1->sayHello();
$cat2 = new Cat('Барсик', 'Рыжий');
$cat2->sayHello();
ivashkevich 01.07.2020 в 19:49

Отлично

Hellbound 11.07.2020 в 17:30
<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello() : void
    {
        echo 'Привет! Меня зовут ' . $this->name . '. Мой цвет - ' . $this->color . '<br>';
    }

    public function setName(string $name) : void
    {
        $this->name = $name;
    }

    public function setColor(string $color) : void
    {
        $this->color = $color;
    }

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

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

$cat1 = new Cat('Снежок', 'Белый');
$cat2 = new Cat('Барсик', 'Рыжий');

$cat1->sayHello();
$cat2->sayHello();

Котики имеют полное право на перекрашивание, если они сами хотят :)

ivashkevich 12.07.2020 в 05:41

Отлично)

VitaliyB 26.07.2020 в 09:21
<?php

class Cat
{
    private $name;
    private $color; //Сделали свойство color приватным

    public function __construct(string $name, string $color) //добавили color в конструктор
    {
        $this->name = $name;
        $this->color = $color;
    }
    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ', ' . ' я ' . $this->color . '<br>';//после того, как назвали своё имя, говорят о том, какого они цвета
    }

    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function getColor(): string // Сделали геттер, который будет позволять получить свойство color
    {
        return $this->color;
    }

}

$cat1 = new Cat('Снежок', 'рыжий');
$cat1->sayHello();
$cat2 = new Cat('Барсик', 'серый');
$cat2->sayHello();

echo  $cat1->getName();
echo '<br>';
echo  $cat2->getColor();
ivashkevich 26.07.2020 в 15:47
    public $weight;

Это для чего? Почему public?

VitaliyB 27.07.2020 в 18:21

Забыл почистить

ivashkevich 27.07.2020 в 18:50

Ок) А исправлять-то будете?)

[email protected] 27.07.2020 в 20:43

Добрый день,

В теме «Модификаторы доступа» Ваш код:

3 class Cat
4 {
5    private $name;
6    public $color;
7    public $weight;
8
9    public function sayHello()
10    {
11        echo 'Привет! Меня зовут ' . $this->name . '.';
12    }
13
14    public function setName(string $name)
15    {
16        $this->name = $name;
17    }
18 }
19
20 $cat1 = new Cat();
21 $cat1->setName("Снежок");
22 $cat1→sayHello();

у меня не работает, пишет ошибку:

( ! ) Catchable fatal error: Argument 1 passed to Cat::setName() must be an instance of string, string given, called in /home/public_html/progi/cat.php on line 21 and defined in /home/public_html/progi/cat.php on line 14

В чем может быть проблема? Что означает данная ошибка?

ОС: Ubuntu 18.04
PHP: 5.6.37
Apache 2

Добр день,

Проблема решилась переходом на версию PHP 7.2
Но почему возникла такая ошибка на версии 5.6, так и не понял.

ivashkevich 29.07.2020 в 17:45

Потому что скалярные типы появились только в 7.0. Весь курс рассчитан на PHP > 7.2

irina-naletova 02.09.2020 в 11:21
class Cat {
   private $name;
   private $color;
   private $weight;

   public function __construct(string $name, string $color) {
     $this->name = $name;
     $this->color = $color;
   }
   public function sayHello() {
     echo 'Привет Меня зовут '.$this->name.' Мой цвет '.$this->color.' Мой вес '.$this- 
   >weight.'<br>' ;
    }
   public function setName(string $name) {
     $this->name = $name;
    }
   public function getName(): string {
     return $this->name;
    }
   public function setColor(string $color) {
      $this->color = $color;
    }
   public function getColor(): string{
    return $this->color;
    }
 }
    $cat_1 = new Cat('Снежок', 'Белый');
    $cat_1->setName('Пушистик');
    $cat_1->setColor('Черный');
    $cat_1->weight = '3,5кг';
    $cat_1->sayHello();

    $cat_2 = new Cat('Барсик', 'Рыжий');
    $cat_2->weight = '4кг';
    $cat_2->sayHello();

    echo $cat_2->getName();
irina-naletova 02.09.2020 в 11:29

Я правильно поняла ,что через сеттер мы передаем значение, а через геттер мы его просто получаем(возвращаем), а через конструктор тоже передаем значение?

ivashkevich 03.09.2020 в 17:22

Да

irina-naletova 03.09.2020 в 19:00

Спасибо исправлюсь с отступами
Исправлю на private

ivashkevich 03.09.2020 в 19:02

А вы комментарий исправляйте тоже (карандашик слева вверху)

ivashkevich 03.09.2020 в 17:22
                        public $weight;

Почему public?

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

Ed8L 20.10.2020 в 17:36

Очень нравятся курсы. Купил ООП и после прохождения куплю PHP для профессионалов. Насколько бы ты рекомендовал сайт с задачками codewars и вообще решение задач на таких сайтах?

ivashkevich 21.10.2020 в 04:58

Крайне рекомендую, хорошо развивает алгоритмическое мышление. У нас на сайте тоже есть задачки.

[email protected] 08.11.2020 в 15:13
<?php 
class Cat
{
    private $name;
    private $color;
    public $wight;

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

    public function SeyHello(){
        echo 'Привет, меня зовут' . $this->name .',' . 'мой цвет - ' . $this->color .'.';
    }
    public function SetName(string $name){
        $this->name = $name;
    }
    public function SetColor(string $color){
        $this->color = $color;
    }
    public function GetName():string {
        return $this->name;
    }
    public function GetColor():string {
        return $this->color;
    }

}
$cat1 = new Cat(' Roxy ', ' butyfull ');
$cat1 ->SeyHello();
ivashkevich 08.11.2020 в 15:38
    public $wight;

Для чего это поле? Почему оно public?

Имена методов пишутся с маленькой буквы.

Скобка, открывающая тело метода, пишется на новой строке.

Вы курс для начинающих не проходили у нас?

pixel 16.11.2020 в 01:49
<?php

    class Cat
    {
        private $name;
        private $color;

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

        public function sayHello()
        {
            echo 'Привет! Меня зовут ' . $this->name . '.';
            echo '<br>У меня ' . $this->color . ' цвет шерстки.';
        }

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

        public function setColor(string $color)
        {
            if (empty($this->getColor())) {
                $this->color = $color;
            }
        }

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

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

    $cat1 = new Cat('Снежок', 'белый');
    $cat2 = new Cat('Барсик', 'рыжий');

    $cat1->sayHello();

    $cat1->setName('Snag');
    $cat1->setColor('white');//попытка изменить цвет не сработает, котикам не надо менять цвет :)
    echo '<br>';
    $cat1->sayHello();

    echo '<br>';
    $cat2->sayHello();
ivashkevich 17.11.2020 в 17:16

Отлично

MikeSiebel 18.11.2020 в 21:41

Добрый день! Спасибо за урок.

<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.';
        echo '<br>';
        echo 'У меня ' . $this->color . ' шубка' . '.';
    }

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

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

$cat1 = new Cat('Снежок', 'белая');
echo $cat1->sayHello();
echo '<br>';
$cat2 = new Cat('Барсик', 'рыжая');
echo $cat2->sayHello();
echo '<br>';
echo '<br>';
$cat1->setColor('перекрашеная рыжая');
$cat2->setColor('перекрашеная белая');
echo $cat1->sayHello();
echo '<br>';
echo $cat2->sayHello();
ivashkevich 19.11.2020 в 20:43

Отлично

Larisa 22.11.2020 в 20:11
<?php

class Cat
{
    private $name;
    private $color;
    public $weight;

    public function __construct(string $name, string $color)
    {
        $this->name = $name;
        $this->color = $color;
    }
    public function sayHello()
    {
        echo ' Привет! Меня зовут ' . $this->name . '. Я ' . $this->color . '. Очень люблю своего хозяина. <br>';
    }
    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function getColor(): string
    {
        return $this->color;
    }
}

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');
$cat1->weight = 3.5;
$cat2->weight = 6.2;

$cat1->sayHello();
$cat1->setName('Снежок');
$cat1->setColor('белый');
$cat2->sayHello();
$cat2->setName('Барсик');
$cat1->setColor('рыжий');

Результат:
Привет! Меня зовут Снежок. Я белый. Очень люблю своего хозяина.
Привет! Меня зовут Барсик. Я рыжий. Очень люблю своего хозяина.

ivashkevich 23.11.2020 в 17:42

Почему вес public? Его нельзя вот так просто брать и изменять. Вес кота можно менять, к примеру, с помощью метода giveFood(), который будет чуть-чуть увеличивать вес. Но напрямую через свойство - нельзя. Для этого мы и делаем свойства private, чтобы внутреннее состояние объекта не менялось непредсказуемым образом. Работая с ним через публичные методы мы можем делать дополнительные проверки.

Larisa 23.11.2020 в 21:22
<?php

class Cat
{
    private $name;
    private $color;
    private $weight;

    public function __construct(string $name, string $color, float $weight)
    {
        $this->name = $name;
        $this->color = $color;
        $this->weight = $weight;
    }
    public function sayHello()
    {
        echo ' Привет! Меня зовут ' . $this->name . '. Я ' . $this->color . '. Очень люблю своего хозяина. <br>';
    }
    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
    public function setWeight(float $weight)
    {
        $this->weight = $weight;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function getColor(): string
    {
        return $this->color;
    }
    public function getWeight(): string
    {
        return $this->weight;
    }
}

$cat1 = new Cat('Снежок', 'белый', '3.5');
$cat2 = new Cat('Барсик', 'рыжий', '6.2');

$cat1->sayHello();
$cat1->setName('Снежок');
$cat1->setColor('белый');
$cat1->setWeight('3.5');

$cat2->sayHello();
$cat2->setName('Барсик');
$cat2->setColor('рыжий');
$cat2->setWeight('6.2');

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

ivashkevich 24.11.2020 в 10:15
getWeight(): string

Метод должен возвращать float

И в сеттер тоже число нужно передавать, аргумент ведь числовой

Larisa 24.11.2020 в 23:16
class Cat
{
    private $name;
    private $color;
    private $weight;

    public function __construct(string $name, string $color, float $weight)
    {
        $this->name = $name;
        $this->color = $color;
        $this->weight = $weight;
    }
    public function sayHello()
    {
        echo ' Привет! Меня зовут ' . $this->name . '. Я ' . $this->color . '. Очень люблю своего хозяина. <br>';
    }
    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function setColor(string $color)
    {
        $this->color = $color;
    }
    public function setWeight(float $weight)
    {
        $this->weight = $weight;
    }
    public function getName(): string
    {
        return $this->name;
    }
    public function getColor(): string
    {
        return $this->color;
    }
    public function getWeight(): float
    {
        return $this->weight;
    }
}

$cat1 = new Cat('Снежок', 'белый', 3.5);
$cat2 = new Cat('Барсик', 'рыжий', 6.2);

$cat1->sayHello();
$cat1->setName('Снежок');
$cat1->setColor('белый');
$cat1->setWeight(3.5);

$cat2->sayHello();
$cat2->setName('Барсик');
$cat2->setColor('рыжий');
$cat2->setWeight(6.2);
?>

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

ivashkevich 25.11.2020 в 21:20

Теперь отлично

serega19860511 30.11.2020 в 20:30
class Cat
{
    private $name;
    private $color;
    private $wight;

    public function __construct(string $name, string $color,int $wight){
        $this->name = $name;
        $this->color = $color;
        $this->wight = $wight;
    }

    public function seyHello()
    {
        echo 'привет меня зовут '.$this->name.' я '.$this->color.' а вешу я '.$this->wight.' кг';
    }

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

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

    public function getColor()
    {
        return $this->color;
    }

    public function setWight(int $wight)
    {
        return $this->wight = $wight;
    }

}

$cat1 = new Cat('пушок','рыжий', 12);
$cat1->seyHello();
$cat1->setWight(9);
echo'<br>';
$cat1->seyHello();

echo '<br>';
$cat2 = new Cat('васька','чёрный',8);
$cat2->seyHello();
echo '<br>';

$cat3 = new Cat('Снежок', 'белый',6);
$cat3->seyHello();
ivashkevich 01.12.2020 в 19:32

Всё отлично. Только опечатка в слове weight

serega19860511 30.11.2020 в 20:36
public function getName(): string
    {
        return $this->name;
    }

Вопрос: почему в геттере Вы пишите вот так ": string", а у меня сработало без этого. Ведь мы же получаем а не передаём и в сеттере уже по идее установлен тип данных.

ivashkevich 01.12.2020 в 19:34

Так указывается тип возвращаемого значения. Чтобы сразу было понятно что этот метод всегда возвращает строку.

serega19860511 30.11.2020 в 20:40
public function __construct(string $name, string $color,int $wight){
        $this->name = $name;
        $this->color = $color;
        $this->wight = $wight;
    }

Да и ещё вопрос я хотел передать в $wight и целое число и с плавующей точкой, через логический ||, но у меня не вышло. Возможно ли это?

ivashkevich 01.12.2020 в 19:36

Это одно из нововведений новой версии php8, возможность указать несколько типов аргументов через |
Однако я не рекомендую так делать, так как это противоречит самому принципу типизации. Вес - величина с плавающей точкой, так что делайте float.

kan22 24.12.2020 в 18:26
<?php

class Cat
{
    private $name;
    private $color;
    public $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ' и мой цвет ' . $this->color . '. ';
    }

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

    public function setColor(string $color)
    {
        $this->color= $color;
    }

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

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

$cat1 = new Cat('Снежок', 'белый');
$cat1 ->sayHello();

$cat2 = new Cat('Барсик', 'рыжий');
$cat2 ->sayHello();
ivashkevich 24.12.2020 в 20:01
    public $weight;

это для чего?

kan22 25.12.2020 в 16:46

Теперь всё иначе

class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function sayHello(): void
    {
        echo 'Привет! Меня зовут ' . $this->name . ', мой цвет ' . $this->color . ' и я вешу ' . $this->weight . ' кг.';
    }

    public function setName(string $name): void
    {
        $this->name = $name;
    }

    public function setColor(string $color): void
    {
        $this->color= $color;
    }

    public  function  setWeight(float $weight): void
    {
        $this->weight = $weight;
    }

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

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

    public function getWeight(): float
    {
        return $this->weight;
    }
}

$cat1 = new Cat('Снежок', 'белый', 5.4);
$cat1 ->sayHello();
echo '<br>';
$cat2 = new Cat('Барсик', 'рыжий', 3.5);
$cat2 ->sayHello();
ivashkevich 26.12.2020 в 21:44

Отлично

dimadima 11.02.2021 в 10:52
<?php
class Cat
{
    private $name;
    private $color;
    public $weight;

    public function __construct(string $name, string $color)
    {
        $this->color =$color;
        $this->name = $name;
    }
    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name.', мой цвет '.$this->color.'.';
    }
    public function setName(string $name)
    {
        $this->name = $name;
    }
    public function getName(): string
    {
        return $this->name;
    }

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

$cat1 = new Cat('Снежок', 'белый');
$cat1->sayHello();
echo '<br>';
$cat2 = new Cat('Барсик', 'рыжий');
$cat2->sayHello();
ivashkevich 14.02.2021 в 15:13
    public $weight;

Это для чего?

Egor.Ka 13.03.2021 в 18:48

Как-то так?) А можно было сеттеры и геттеры имени и цвета объединить в один геттер и один сеттер? Или лучше для каждого свойства объекта делать отдельный метод?

<?php

class Cat
{
    private $name;
    private $color;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . ',' . ' я ' . $this->color ;
    }

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

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

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

$cat1 = new Cat('Снежок', 'белый');
$cat2 = new Cat('Барсик', 'рыжий');

echo $cat1->sayHello() . '<br>';
echo $cat2->sayHello() . '<br>';
ivashkevich 16.03.2021 в 09:59

Как вы представляете себе объединенный геттер?

[email protected] 16.04.2021 в 14:46

Интересная идея, что-то типа конструктора доступного после создания объекта получится)

Sergey503 26.04.2021 в 17:58
class Cat
{
    private $name;
    private $color;
    private $weight;

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

    public function sayHello()
    {
        echo 'Привет! Меня зовут ' . $this->name . '.';
        echo '<br>';
        echo 'Цвет моей шерсти ' . $this->color . '.';
        echo '<br>';
        echo 'Мой вес ' . $this->weight . 'кг. Так кормят';
        echo '<br><br>';
    }

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

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

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

    public function setColor(string $color)
    {
        $this->color = $color;
    }

    public function getWeight(): float
    {
        return $this->weight;
    }

    public function setWeight(float $weight)
    {
        $this->weight = $weight;
    }

}

$cat1 = new Cat('Снежок', 'ядовито зеленый', 3);
// Меняем значения
$cat1->setName('Усатый ниндзя');
$cat1->setColor('Черный');
$cat1->setWeight(1);
$cat1->sayHello();

$cat2 = new Cat('Барсик', 'чернее черного', 15);
// Меняем значения
$cat2->setName('Чубайс');
$cat2->setColor('Белый');
$cat2->setWeight(70);
$cat2->sayHello();
ivashkevich 28.04.2021 в 19:24
    public function __construct (string $name, string $color, $weight)

Где тип для weight?

        $this ->weight = $weight;

Лишний пробел

$cat1 = new Cat('Снежок', 'ядовито зеленый', '3');
$cat2->setWeight('70');

Почему weight передается строкой?

Sergey503 29.04.2021 в 14:34

Исправлено.

ivashkevich 01.05.2021 в 17:42

Отлично

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