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


SlipKnot

Домашка:

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

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

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

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

echo $cat1->sayHello();

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

Galay

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

ivashkevich

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

Ilon

Домашка


<?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
  1. Перед аргументами методов нужно указывать их тип.
  2. return в конструкторе не нужен.
  3. Геттеры не должны ничего изменять у объекта, в нашем случае даже не должны принимать никаких аргументов.
  4. Свойство weight стоит тоже сделать приватным и задаваться через сеттер, а доступ извне должен обеспечиваться через геттер.
computerix
<?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

Отлично

ArtemijeKA

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

ArtemijeKA

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

Отлично!

jeeree
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

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

ArtemijeKA

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

ivashkevich

Все верно =)

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

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

DmitryGavrilov

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

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

Отлично!

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

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

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

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

<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

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

EWA

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

ivashkevich

Отлично

zebra

Домашка:

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

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

function func(): void
{ // вот сюда
Todd
<?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

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

argon2i

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

ivashkevich

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

Moskva

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

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

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

demyanovpaul@yandex.ru

Дополните метод 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

Отлично!

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

Хорошо.

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

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

Waldemar

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

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

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

Waldemar

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

ivashkevich

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

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

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

  1. Да
  2. Для конструктора не нужно
  3. Синтаксис позволяет. Видимо, что-то не так делал.
lordbear53@gmail.com
<?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

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

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

Отлично!

landialog
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

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

Bogdan

Дополните метод 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

Отлично! =)

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

Отлично!

excent63

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

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

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

excent63

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

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

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

excent63

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

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

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

function setBlaBla(): void
Evgeny
<?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

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

function func(): void
{
...
babls2332@gmail.com
<?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

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

babls2332@gmail.com

Подправил

ivashkevich

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

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

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

function func(): void
{
...
arhipow@mail.ru

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

ivashkevich

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

arhipow@mail.ru

Ок, понятно!

Grewi
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

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

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

Отлично

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

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

polvanovv

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

ivashkevich

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

Dram

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

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

№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

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

Dram

№3

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

+

echo $cat1->getColor();
Dram

№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

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

Dram

№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

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

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

Супер!

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

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

XXX

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

ivashkevich

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

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

Отлично

ashfedor

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


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

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

Bocha

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

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

esqrx

// 1

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

Отлично!

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

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

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

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

Moskva

В задании ничего не было связано с 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

Отлично

vaynshteyne@yandex.ru
<?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
$cat1-> sayHello();

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

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

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

webdev

ДЗ

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

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

webdev

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

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

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

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

webdev

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

ivashkevich

Спасибо

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

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

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

Супер!

Blook
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

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

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

Blook

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

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

Супер!

Pro100Bah

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

Отлично

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

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

Dreft

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

ivashkevich

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

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

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

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

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

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

prinzplanloser0514@gmail.com

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

ivashkevich

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

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

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

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