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


SlipKnot 13.07.2018 в 09:23

Домашка:

class PaidLesson extends Lesson
{
    private $price;
    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($text, $title, $homework);
        $this->price = $price;
    }
    public function getPrice()
    {
        return $this->price;
    }
    public function setPrice(float $price)
    {
        $this->price = $price;
    }
}

$paidLesson = new PaidLesson('Урок о наследовании PHP', 'лол, кек, чебурек',
    'Домашка: ложитесь спать, утро вечера мудренее', 99.90);
var_dump($paidLesson);

UPD: что такое "void"? Мы вроде такого не проходили. Или дайте ссылку где прочитать

ivashkevich 14.07.2018 в 09:28

Отлично!
А void - значит что функция ничего не возвращает.

Galay 19.07.2018 в 14:44
class PaidLesson extends Lesson {
    private $price;
    public function __construct(string $title, string $text, string $homework, float $price) {
        parent:: __construct ($title, $text, $homework);
        $this->price = $price;
        }
    public function getPrice()
            {
                return $this->price;
            }
    public function setPrice(): void 
            {
                $this->price = $price;
            }
}
$pideLesson = new PaidLesson('Урок о наследовании в PHP','Лол, кек, чебурек','Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($pideLesson);
ivashkevich 21.07.2018 в 06:17

Отлично!

Invo 24.06.2019 в 14:15

а разве setPrice - не должен принимать саму цену?

Ilon 01.08.2018 в 09:56
Class PaidLesson extends Lesson{
    private $price;

    public function __construct($title, $text, $homework, $price){
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice($price):void {
        $this->price = $price;
    }
    public function getPrice(){
        return $this->price;
    }
}

$paidlesson = new PaidLesson("Урок о наследование в PHP", "лол, кек, чебурек", "Повторение мать учение!!!", "445,5 рубль");

echo "<br>";
echo "<pre>";
var_dump($paidlesson);
echo "</pre>";
ivashkevich 03.08.2018 в 15:35

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

Ilon 08.08.2018 в 11:37

Я писал типов аргументов, но PHPStorm выдает подсказку, это устарело и его использовали ниже версии 7. Так писать или нет?)

ivashkevich 10.08.2018 в 19:54

Не мог он такую подсказку дать, он говорит, что в Ваших настройках PHPStorm указана версия PHP < 7, а типы появились позже. Нужно зайти в настройки PHPStorm в пункт PHP и выбрать правильную версию.

Ilon 13.08.2018 в 14:05

Извиняюсь, английский не очень у меня, не правильно понял))

ivashkevich 13.08.2018 в 15:32

Ничего страшного, главное чтобы Вы на новой версии учились =)

computerix 30.08.2018 в 12:47
<?php

class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }
}

class Lesson extends Post
{
    protected $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

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

    public function setHomework(string $homework): void
    {
        $this->homework = $homework;
    }
}
class PaidLesson extends Lesson
{
    protected $price;

    public function __construct(string $title, string $text, string $homework, string $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

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

    public function setPrice(string $price): void
    {
        $this->price = =$price;
    }
}   
$lesson = new Lesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', '99.90');
var_dump($lesson);
ivashkevich 01.09.2018 в 13:30

Отлично!

DmitryGavrilov 14.09.2018 в 11:08
class PaidLesson extends Lesson {

    private $price;

    public function __construct( string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice() {
        return $this->price;
    }

    public function setPrice(float $price) {
        $this->price = $price;
    }

}

$paidLesson  = new PaidLesson('Урок о наследование PHP', 'Лол,кек,чебурек',
    'Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($paidLesson);
ivashkevich 22.09.2018 в 19:48

Отлично!

ArtemijeKA 14.09.2018 в 17:11
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice($price): void
    {
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }
}

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($paidLesson);
$paidLesson->setPrice(55.234);
$paidLesson->setTitle('Новый title!');
$paidLesson->setText('Новый text!');
$paidLesson->setHomework('Новый homework!');
var_dump($paidLesson);

//object(PaidLesson)[1]
  //private 'price' => float 55.234
  //private 'homework' (Lesson) => string 'Новый homework!' (length=20)
  //protected 'title' => string 'Новый title!' (length=17)
  //protected 'text' => string 'Новый text!' (length=16)
ivashkevich 22.09.2018 в 19:48

Всё супер!

Benya 28.09.2018 в 20:53
class PaidLesson extends Lesson
{
    private $price;

    public function __construct($title, $text, $homework, $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }
    public function setPrice(float $price): void
    {
        $this->price = $price;
    }
}

$paid = new PaidLesson('Урок о наследовании в PHP', ' Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', '99.9');
var_dump($paid);
ivashkevich 28.09.2018 в 23:15

Отлично!

SBTesla 04.10.2018 в 11:55
class PaidLesson extends Lesson {
     protected  $prise;

     public function __construct(string $title, string $text, string $homework, string $prise)
     {
          parent::__construct($title, $text, $homework);
          $this->prise = $prise;
     }

     public function getPrise():float {
          return $this->prise;
     }
     public function setPrise($prise): void
     {
          $this->prise = $prise;
     }
}

$PaidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее','цена:99.90');
var_dump($PaidLesson);
ivashkevich 06.10.2018 в 14:24

Хорошо, только price через c.

AxLT 12.10.2018 в 20:30

Отличный курс, все доступно и понятно.

class PayLesson extends Lesson
{
    protected $price;

    public function __construct(string $title, string $text, string $homeWork, float $price)
    {
        parent::__construct($title, $text, $homeWork);
        $this->price = $price;
    }

    public function setPrice(float $price)
    {
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }
}

$payLess = new PayLesson
(
    'Урок о наследовании в PHP',
    'Лол, кек, чебурек',
    'Ложитесь спать, утро вечера мудренее',
    99.90
);
var_dump($payLess);
ivashkevich 13.10.2018 в 21:17

Отлично! И спасибо =)

AntonM99 04.11.2018 в 10:39
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }

    public function setPrice(float $price): void
    {
        $this->price = $price;
    }
}

$pLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', '99.90');

var_dump($pLesson);
ivashkevich 04.11.2018 в 13:52

Отлично!

zebra 04.11.2018 в 13:36

Домашка:)

 class PaidLesson extends Lesson
 {
     private $price;

     public function __construct(string $title, string $text, string $homework, float $price)
     {
         parent::__construct($title, $text, $homework);
         $this->price = $price;
     }

     public function setPrice(float $price): void
     {
         $this->price = $price;
     }

     public function getPrice()
     {
         return $this->price;
     }
 }

 $paidLesoon = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудрене', 99.90);
 var_dump($paidLesoon);
ivashkevich 04.11.2018 в 13:53

Отлично!

Todd 04.11.2018 в 19:08
<?php
class PaidLesson extends Lesson {

    private $price;

    public function __construct(string $title, string $text, string $homework, float $price) {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice(float $price): void {
        $this->price = $price;
    }

    public function getPrice(): float {
        return $this->price;
    }
}

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);

debug($paidLesson);
?>
ivashkevich 04.11.2018 в 19:17

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

demyanovpaul@yandex.ru 05.11.2018 в 22:00

Создайте ещё один класс, являющийся наследником класса Lesson - PaidLesson (платный урок).
Объявите в нем свойство price (цена), а также геттеры и сеттеры для этого свойства. Добавьте в конструкторе параметр, через который это свойство будет устанавливаться при создании объекта.
Создайте объект этого класса со следующими свойствами:
заголовок: Урок о наследовании в PHP
текст: Лол, кек, чебурек
домашка: Ложитесь спать, утро вечера мудренее
цена: 99.90
Выведите этот объект с помощью var_dump()

<?php

class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }
}

class Lesson extends Post
{
    protected $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

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

    public function setHomework(string $homework): void
    {
        $this->homework = $homework;
    }
}

class PaidLesson extends Lesson
{
    protected $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }

    public function setPrice(float $price): void
    {
        $this->price = $price;
    }
}

$lesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек',
    'Ложитесь спать, утро вечера мудренее', 99.90);

var_dump($lesson);
ivashkevich 05.11.2018 в 22:15

Отлично!

Moskva 10.11.2018 в 11:26
    class PaidLesson extends Lesson
    {
        private $price; 
        public function __construct(string $title, string $text, string $homework, string $price)
        {
            parent::__construct($title, $text, $homework); // позваляет унаследовать переменные в this из родительского класса
            $this->price = $price;
        }
        public function getPrice(): string
        {
            return $this->$price;
        }
        public function setPrice(string $price): void 
        {
            $this->price = $price;
        }   
    }
    $message = new PaidLesson('Урок о наследовании PHP', 'лол, кек, чебурек',
    'Домашка: ложитесь спать, утро вечера мудренее', 99.90);
    var_dump($message);
ivashkevich 12.11.2018 в 01:50

Отлично!

bildep 18.11.2018 в 15:15
<?php
class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }
}

class Lesson extends Post
{
    protected $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

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

    public function setHomework(string $homework): void
    {
        $this->homework = $homework;
    }
}

class PaidLesson extends Lesson
{
    protected $price;

    public function __construct(string $title, string $text, string $homework, string $price)
    {
        parent::__conctruct($title, $text, $homework);
        $this->setPrice($price);

    }

    public function setPrice(string $price): void
    {
        $this->price = $price;
    }

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

}

$lesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', '99.90');

var_dump($lesson);

ошибка выходит Fatal error: Uncaught Error: Call to undefined method Lesson::__conctruct() in

ivashkevich 19.11.2018 в 21:44

Это из-за опечатки в написании: __conctruct, а должно быть __construct.

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

lig7771991@list.ru 24.11.2018 в 18:29
<?php

class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }
}

class Lesson extends Post
{
    protected $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

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

    public function setHomework(string $homework): void
    {
        $this->homework = $homework;
    }
}
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

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

    public function setPrice(string $price): void
    {
        $this->price = $price;
    }
}

$lesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
echo '<pre>';
var_dump($lesson);
echo '</pre>';
ivashkevich 24.11.2018 в 21:57

Супер!

Waldemar 30.11.2018 в 02:06
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }

    public function setPrice(float $price): void
    {
        $this->price = $price;
    }
}

$PaidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($PaidLesson);
ivashkevich 30.11.2018 в 23:16

Супер!

Waldemar 30.11.2018 в 02:09

Решил в ОпенСервере сменить PHP с 7.0 на 7.2, и var_dump вывелся в сплошную строку:

object(PaidLesson)#1 (4) { ["price":"PaidLesson":private]=> float(99.9) ["homework":"Lesson":private]=> string(67) "Ложитесь спать, утро вечера мудренее" ["title":protected]=> string(43) "Урок о наследовании в PHP" ["text":protected]=> string(30) "Лол, кек, чебурек" }

ivashkevich 30.11.2018 в 23:17

В 7.2 у OpenServer отсутствует XDebug. Это именно он формирует красивый вывод var_dump.

iluha22 18.10.2019 в 08:30

Оберни var_dump в теги <pre>...</pre>

CarfikDK 16.12.2018 в 16:06

Спасибо за урок!
У меня есть вопрос: "var_dump();" у меня выводится строкой, а не акуратно столбиком как у вас, как это можно решить?

<?php

class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }
}

class Lesson extends Post
{
    private $homework;

    public function __construct(string $title, string $text, string $homework )
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

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

    public function setHomework(string $homework) : void
    {
        $this->homework = $homework;
    }
}

class PaidLesson extends Lesson
{
    private $price;
    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice() : float
    {
        return $this->price;
    }

    public  function  setPrice() : void
    {
        $this->price = $price;
    }
}

$lesson = new PaidLesson('Урок о наследовании PHP', 'Лол, кек, чебурек', 'Сон для слабакооов!!', '99.90');

var_dump($lesson);
ivashkevich 16.12.2018 в 18:17

За это отвечает расширение xdebug. Инструкция тут

CarfikDK 17.12.2018 в 13:41

Совсем забыл настроить Xdebug поле того как скачал PHPstorm из телеграм чата. Огромное спасибо! А как само ДЗ?

ivashkevich 17.12.2018 в 13:48

Что-то не выводится цена.

CarfikDK 17.12.2018 в 14:48

Исправил

<?php

class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }
}

class Lesson extends Post
{
    private $homework;

    public function __construct(string $title, string $text, string $homework )
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

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

    public function setHomework(string $homework) : void
    {
        $this->homework = $homework;
    }
}

class PaidLesson extends Lesson
{
    private $price;
    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice() : float
    {
        return $this->price;
    }

    public  function  setPrice(float $price) : void
    {
        $this->price = $price;
    }
}

$lesson = new PaidLesson('Урок о наследовании PHP', 'Лол, кек, чебурек', 'Сон для слабакооов!!', '99.90');
var_dump($lesson);
ivashkevich 17.12.2018 в 15:29

Другое дело :)

vadymbilyi@gmail.com 20.12.2018 в 16:10
class PaidLesson extends Lesson
{
    public $price;

    function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }

    public function setPrice(string $price): void
    {
        $this->price = $price;
    }

}

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($paidLesson);
ivashkevich 20.12.2018 в 17:42

Супер!

alepawka 01.01.2019 в 13:36
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title,$text,$homework);
        $this -> price = $price;
    }
    public function SetPrice($price) {
        $this -> price = price;
    }
    public function GetPrice() {
        return $this ->price;
    }
}
$lessPHP = new PaidLesson('Урок по наследованию PHP','Лол,кек,чебурек','Ложись спать!','99.90');
var_dump($lessPHP);
ivashkevich 01.01.2019 в 15:47

Ок. Имена методов должны начинаться с маленькой буквы. Для цены указали тип float и явно передаёте строку - почему не число?

landialog 01.01.2019 в 17:29
class PaidLesson extends Lesson
{
    private $price;
    public function __construct($title, $text, $homework, $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice($price)
    {
        $this->price = $price;
    }

    public function getPrice()
    {
        return $this->price;
    }
}

$plesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($plesson);

P.S. Опять этот вопрос по поводу использования типов данных. Где-то в документации по PHP прочитал что добавлением псевдотипов данных используется с PHP 7.1 как подсказка для программистов.
Правда это? Или еще есть др. объяснение, в качестве доп. защиты данных?
К слову сказать в PhpStorme(установлена последняя версия) есть подсказки написания геттеров и сеттеров и там почему-то не добавляет эти доп. данные?

ivashkevich 01.01.2019 в 18:02

Посмотри урок про функции из курса PHP для начинающих.

Bogdan 02.01.2019 в 19:23

Объявите в нем свойство price (цена), а также геттеры и сеттеры для этого свойства. Добавьте в конструкторе параметр, через который это свойство будет устанавливаться при создании объекта.

<?php
include "Lesson.php";

class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice(string $price): void
    {
        $this->price = $price;
    }

    public function getPrice()
    {
        return $this->price;
    }
}

Создайте объект этого класса со следующими свойствами:
заголовок: Урок о наследовании в PHP
текст: Лол, кек, чебурек
домашка: Ложитесь спать, утро вечера мудренее
цена: 99.90

<?php
include "PaidLesson.php";

$paidLesson1 = new PaidLesson(
    'Урок о наследовании в PHP',
    'Лол, кек, чебурек',
    'Ложитесь спать, утро вечера мудренее',
    99.90);

Выведите этот объект с помощью var_dump()

var_dump($paidLesson1);
  1. Большое спасибо за эти уроки, до этого изучал давненько Java, как бы ООП язык, но о ООП знал "слышу звон, не знаю где он", неуверенно себя чувствовал. НО сейчас очень много точек расставилось над i.
  2. в Java вроде было правило, что файл должен иметь название идентичное названию класса, есть ли вообще такое правило, и применяется ли оно к РНР?. Спасибо
ivashkevich 02.01.2019 в 21:56

По коду всё хорошо. По правилу именования - да, есть такое, дальше по курсу будет.

Pavel-Tonk 24.01.2019 в 23:48

У меня у одного ошибка при выполнении метода класса Post:

    public function setText($text):void
    {
        $this->text = $text;
    }

когда пытаюсь использовать сеттер,
Fatal error: Uncaught TypeError: Return value of Post::setText() must be an instance of void, none returned in W:\domains\myproject.loc\www\index.php:26 Stack trace: #0 W:\domains\myproject.loc\www\index.php(51): Post->setText('\xD0\x98\xD0\xB2\xD0\xB5\xD0\xBD\xD0\xB5\xD1\x86\xD0\xBA\xD0...') #1 {main} thrown in W:\domains\myproject.loc\www\index.php on line 26.
Как я понял ожидается возврат любого значения, из-за void, но его не происходит, т.к. нам return не нужен.

Pavel-Tonk 24.01.2019 в 23:54

Вопрос решен=) Переключился на версию PHP 7.1. Оставлю комент, вдруг кому понадобится!

ivashkevich 25.01.2019 в 10:10

ОК)

Bugaga159 02.02.2019 в 09:51
class PaidLesson extends Lesson
{
    protected $price;

    public function __construct( string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }
    public function getPrice(): float
    {
        return $this->price;

    }
    public function setPrice(float $price): void
    {
        $this->price = $price;
    }

}

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($paidLesson);
ivashkevich 03.02.2019 в 23:47

Отлично. А почему поле цены с типом protected?

Bugaga159 04.02.2019 в 20:29

Да, я тут ошибся, нужно было private.

excent63 03.02.2019 в 17:53

Спасибо за урок!
Это задание понял вот так:

class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, string $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }
    public function getPrice(): string
    {
        return $this->price;
    }
    public function setPrice(string $price): void
    {
        $this->price = $price;
    }
}
$paidLesson = new PaidLesson('Урок о наследовании PHP','Лол,кек,чебурек','Ложитесь спать, утро вечера мудренее', '99,90');
var_dump($paidLesson);
ivashkevich 03.02.2019 в 23:48

Цену всё-таки принято хранить в виде чисел, а не строк.

excent63 06.02.2019 в 21:03

Теперь до конца понял как лучше применять строки, или числа. Спасибо!

class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }
    public function getPrice(): float
    {
        return $this->price;
    }
    public function setPrice(float $price): void
    {
        $this->price = $price;
    }
}
$paidLesson = new PaidLesson('Урок о наследовании PHP','Лол,кек,чебурек','Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($paidLesson);
ivashkevich 07.02.2019 в 13:50

Ок!

cap 25.02.2019 в 00:16
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice(): float
    {
       return $this->price;
    }

    public function setPrice(float $price): void
    {
        $this->price = $price;
    }
}

$paidlesson1 = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек',
    'Ложитесь спать, утро вечера мудренее', '99.90');

var_dump($paidlesson1);
ivashkevich 25.02.2019 в 10:38

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

Evgeny 10.03.2019 в 15:52

<?php

class Post
{

    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

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

    public function setTitle(string $title): void
    {
        $this->title = $title;
    }

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

    public function setText(string $text): void
    {
        $this->text = $text;
    }
}

class Lesson extends Post
{

    private $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

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

    public function setHomework(string $homework): void
    {
        $this->homework = $homework;
    }
}

class PaidLession extends Lesson
{

    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }

    public function setPrice(float $price): void
    {
        $this->price = $price;
    }
}

$paidlession = new PaidLession('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее',
    99.90);
var_dump($paidlession);
ivashkevich 11.03.2019 в 21:13

Отлично!

babls2332@gmail.com 17.03.2019 в 17:47
class PaidLesson extends Lesson
{
    private $price;

    function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;

    }

    function setPaid(float $price) : void
    {
        $this->price = $price;
    }

    function getPaid(): float
    {
        return $this->price;
    }
}
include 'PaidLesson.php';
$paid = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($paid);
ivashkevich 17.03.2019 в 23:56

Отлично

85bogdan45 17.03.2019 в 18:18

Если при выполнении домашки в классе Lesson модификатор доступа оставить private $homework; то результат выдает вот такой, но это же неверно? Не совсем понимаю что должно сломаться в этом случае

object(PaidLesson)[1]
  private 'price' => float 99.9
  private 'homework' (Lesson) => string 'Ложитесь спать, утро вечера мудренее' (length=67)
  protected 'title' => string 'Урок о наследовании в PHP' (length=43)
  protected 'text' => string 'Лол, кек, чебурек' (length=30)

Нужно изменить на protected $homework; и тогда результат получится вот такой:

object(PaidLesson)[1]
  private 'price' => float 99.9
  protected 'homework' => string 'Ложитесь спать, утро вечера мудренее' (length=67)
  protected 'title' => string 'Урок о наследовании в PHP' (length=43)
  protected 'text' => string 'Лол, кек, чебурек' (length=30)
ivashkevich 17.03.2019 в 23:57

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

arhipow@mail.ru 19.03.2019 в 12:15
class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }
}

class Lesson extends Post
{
    protected $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

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

    public function setHomework(string $homework): void
    {
        $this->homework = $homework;
    }
}
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice($price)
    {
        $this->price = $price;
    }

    public function getPrice()
    {
        return $this->price;
    }
}
$PaidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);

var_dump($PaidLesson);
ivashkevich 19.03.2019 в 23:26

Хорошо. А почему в Post и Lesson свойства protected, а в PaidLesson private?

arhipow@mail.ru 20.03.2019 в 06:00

Потому что свойство price принадлежит классу PaidLesson, а от этого класса никто не наследует.правильно?

ivashkevich 20.03.2019 в 10:02

Верно =)

Grewi 28.03.2019 в 23:26
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice():float
    {
        return $this->price;
    }

    public function setPrice(float $price):void
    {
        $this->price = $price;
    }
}

$PaidLesson = new PaidLesson('Урок о наследовании в PHP','Лол, кек, чебурек',
    'Ложитесь спать, утро вечера мудренее',99.9);

var_dump($PaidLesson);
ivashkevich 29.03.2019 в 16:29

Отлично

Boodoo 09.04.2019 в 19:58
<?php
    class PaidLesson extends Lesson
    {
        private $price;

        public function __construct(string $title, string $text, string $homework, string $price)
        {
            parent::__construct($title, $text, $homework);
            $this->price = $price;
        }
        public function getPrice() : string
        {
            return $this->price;
        }
        public function setPrice($price) : void
        {
            $this->price = $price;
        }
    }

    $paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
    var_dump($paidLesson);
ivashkevich 09.04.2019 в 21:00

Почему у вас цена - это строка? В сеттере тоже должен быть тип.

Boodoo 10.04.2019 в 06:17
class PaidLesson extends Lesson
    {
        private $price;

        public function __construct(string $title, string $text, string $homework, float $price)
        {
            parent::__construct($title, $text, $homework);
            $this->price = $price;
        }
        public function getPrice() : string
        {
            return $this->price;
        }
        public function setPrice(float $price) : void
        {
            $this->price = $price;
        }
    }

    $paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
    var_dump($paidLesson);
ivashkevich 10.04.2019 в 15:19

Ок

polvanovv 18.04.2019 в 06:36
class  PaidLesson extends  Lesson
{
    private $price;

    public function __construct(string $title,string $text,string $homework,string $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;

    }

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

    public function setPrice( string $price): void
    {
        $this->price = $price;
    }

}

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 
'Ложитесь спать, утро вечера мудренее', '99.90');

var_dump($paidLesson);

Если в родителях указаны типы переменных надо ли повторяться в наследниках или такая запись тоже верна?

public function __construct($title, $text, $homework,string $price)
ivashkevich 18.04.2019 в 07:34

Всё у вас верно. При вызове метода мы не указываем тип аргументов, тип указывается только в описании метода.
А вот price должен иметь тип float.

Dram 28.04.2019 в 19:15

Разобрался, так правильнее

class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice()
    {
        return $this->price;
    }

    public function setPrice($price): void
    {
        $this->price = $price;
    }

}

$platno = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', '99.90');

var_dump($platno);
ivashkevich 29.04.2019 в 11:43

Отлично!

artemship 06.05.2019 в 17:28
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice(float $price): void
    {
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }

}

$paidLesson = new PaidLesson(
    'Урок о наследовании в PHP',
    'Лол, кек, чебурек',
    'Ложитесь спать, утро вечера мудренее',
    99.90
);
var_dump($paidLesson);
ivashkevich 10.05.2019 в 13:27

Образцовая домашка

Tina 09.06.2019 в 13:53

Домашка "Наследование"

class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }

    public function setPrice($price): void
    {
        $this->price = $price;
    }
}

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);

var_dump($paidLesson);
ivashkevich 09.06.2019 в 18:25
public function getPrice()

нужно указать возвращаемый тип.

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', '99.90');

Параметр float, а передаёте зачем-то строку.

Tina 09.06.2019 в 19:00

Спасибо, поняла ошибку

ivashkevich 10.06.2019 в 03:01

Отлично

ashfedor 09.06.2019 в 18:32
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    /**
     * @return mixed
     */
    public function getPrice(): float
    {
        return $this->price;
    }

    /**
     * @param mixed $price
     */
    public function setPrice(float $price): void
    {
        $this->price = $price;
    }
}

$paidLesson = new PaidLesson(
    'Урок о наследовании в PHP',
    'Лол, кек, чебурек',
    'Ложитесь спать, утро вечера мудренее',
    99.90
);
var_dump($paidLesson);
ivashkevich 09.06.2019 в 18:41
public function getPrice()

нужно указать возвращаемый тип.

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', '99.90');

Параметр float, а передаёте зачем-то строку.

ashfedor 09.06.2019 в 20:16

Понял! поправил

ivashkevich 10.06.2019 в 03:00

Отлично

Bocha 13.06.2019 в 16:36

Артем, спасибо за урок!
Есть вопрос:
В классе Lesson оставляю модификатор доступа к свойству 'homework' как 'private' и все выводится без ошибок, однако, судя по тексту урока, я не должен был получить доступ к этому свойству из наследуемого класса (т.к. 'private', а не 'protected'). Увидел комментарий выше о том, что через публичные геттеры и сеттеры можно достучаться до частных свойств родительского объекта. Это именно тот случай или у меня где-то закралась ошибка? Как делать правильнее и на что это влияет (скорость, безопасность, качество кода и т.д.)?

class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function getTitle()
    {
        return $this->titile;
    }

    public function setTitle($title): void
    {
        $this->$title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text=$text;
    }
}

class Lesson extends Post
{
    private $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

    public function getHomework()
    {
        return $this->homework;
    }

    public function setHomework($homework): void
    {
        $this->homework=$homework;
    } 
}

class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice()
    {
        return $this->price;
    }

    public function setPrice($price): float
    {
        $this->price=$price;
    } 

}

$paidlesson1 = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);

var_dump($paidlesson1);
ivashkevich 13.06.2019 в 19:56

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

rpash151 22.06.2019 в 14:19
<?php

class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }

    public function getText()
    {
        return $this->text;
    }
}

class Lesson extends Post
{
    protected $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

    public function setHomework($homework): void
    {
        $this->homework = $homework;
    }

    public function getHomework()
    {
        return $this->homework;
    }
}

class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice($price): void
    {
        $this->price = $price;
    }

    public function getPrice()
    {
        return $this->price;
    }
}

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Позновательные уроки о наследовании',
    'Утро вечера мудренее',99.99);
var_dump($paidLesson    );
ivashkevich 23.06.2019 в 17:49

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

Moskva 29.06.2019 в 15:44
class PaidLesson extends Lesson{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price= $price;
    }

    public function getPrice():string{
        return $this->price;
    }
    public function setPrice(float $price):void{
        $this->price = $price;
    }

}

$paidLesson = new PaidLesson('Урок о наследовании',
    'Лол, кек, чебурек',
    'Ложитесь спать, утро вечера мудренее',
    99.90);
var_dump($paidLesson);
ivashkevich 30.06.2019 в 15:04

Отлично

Bizzzon 16.07.2019 в 21:23
class PaidLesson extends Lesson
{
    private $price;
    public function __construct(string $title, string $text, string $homework, int $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }
    public function setPrice(float $price)
    {
        $this->price = $price;
    }
    public function getPrice() {
        $this->price = $price;
    }
}

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', '99.90');
var_dump($paidLesson);
ivashkevich 17.07.2019 в 04:35

Отлично.

    public function getPrice() {
        $this->price = $price;
    }

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

Metey 19.07.2019 в 10:34
<?php
class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }
}

class Lesson extends Post
{
    private $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

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

    public function setHomework(string $homework): void
    {
        $this->homework = $homework;
    }
}

class PaidLesson extends Lesson
{
    public $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

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

    public function setPrice(string $price): void
    {
        $this->price = $price;
    }
}
$PLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($PLesson);
ivashkevich 20.07.2019 в 14:36
    protected $title;
    protected $text;

Почему protected? Напрямую в дочерних классах не используются?

public function getTitle()

Нужно у геттеров тоже указать тип возвращаемого значения.

public $price;

Тут чего это вообще public стало?

$PLesson

Имена переменных начинаются с маленькой буквы. Всегда.

webdev 19.07.2019 в 16:28

ДЗ

class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, string $price)
    {
        parent::__construct($title,$text,$homework);
        $this->price = $price;
    }

    public function setPrice(string $price): void
    {
        $this->price = $price;
    }

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

$paidlesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', '99.90');
var_dump($paidlesson);
ivashkevich 20.07.2019 в 14:36

Супер

Reechniy 20.07.2019 в 17:54
<?php

class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }
}
class Lesson extends Post
{
    protected $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

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

    public function setHomework(string $homework): void
    {
        $this->homework = $homework;
    }
}
class paidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, string $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

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

    public function setPrice(string $price): void
    {
        $this->price = $price;
    }
    }
    $paidLesson = new paidLesson('Урок наследования в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', '99.90');
var_dump($paidLesson);
ivashkevich 21.07.2019 в 05:22
    protected $title;
    protected $text;
    protected $homework;

Вот это всё должно быть private, так как в дочерних классах нет прямых обращений к этим свойствам.

ivashkevich 21.07.2019 в 05:23

getTitle(): string
Стоит везде указать типы возвращаемых значений.

Blook 31.07.2019 в 22:11
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice(float $price): void
    {
        $this->price = $price;
    }

    public function getPrice(): float 
    {
        return $this->price;
    }
}

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 
'Ложитесь спать, утро вечера мудренее', 99.90);
ivashkevich 01.08.2019 в 04:53

Супер!!!

gruimed 04.08.2019 в 13:38
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice() : float
    {
        return $this->price;
    }

    public function setPrice (float $price) : void
    {
        $this->price = $price;
    }
}

$paidLesson = new PaidLesson('Lesson about Inheritance', 'Lol, kek, cheburek', 'Go to sleep', 99.90);
var_dump($paidLesson);
ivashkevich 04.08.2019 в 21:03

Отлично

prognoz 16.08.2019 в 00:59

Почему в сеттерах пишут void?
setTitle($title): void
Что здесь означает void?

ivashkevich 16.08.2019 в 20:29

Это означает, что метод ничего не возвращает (return отсутствует или используется без аргументов)

khuurak 16.08.2019 в 16:11
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent:: __construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }

    public function setPrice(float $price): void
    {
        $this->price = $price;
    }
}

$price_PaidLesson = new PaidLesson("Двоичная матрицу", "Дана матрица вида ..", "Расписать двоичную матрицу", 99.90);

echo '<pre>';
var_dump($price_PaidLesson);
echo '</pre>';
ivashkevich 16.08.2019 в 20:30

Отлично

Pro100Bah 02.09.2019 в 11:26
class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }
}

class Lesson extends Post
{
    protected $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

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

    public function setHomework(string $homework): void
    {
        $this->homework = $homework;
    }
}

class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice(float $price): void
    {
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }
}

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($paidLesson);
ivashkevich 02.09.2019 в 18:40
    protected $title;
    protected $text;

Почему protected? Свойства ведь не используются в дочерних классах.

Pro100Bah 03.09.2019 в 16:11
    protected $title;
    protected $text;

1 ВПР. По уроку смотрел, но работает и с приватным модификатором также, а как правильно необходимо было сделать?
2 ВПР. Слетела лицензия на PHPStorm 2018.1; нашел новую скачал и установил PhpStorm 2019.2.1 Build #PS-192.6262.66. Так вот, а новая версия мне показывает все методы в данном домашнем задании(геттеры и сеттеры) с ошибкой: Unused elements: getTitle и так со всеми.
3 ВПР. Забегая немного в перед, это уже с 10-13 урока, при создании классов по уроку дает PHPStorm такое сообщение: 03.09.2019
17:19 Do you want to mark folder as PSR-0 root?
C:/OpenServer 5.3.0/OSPanel/domains/myproject.loc/src
Mark as PSR-0 root
Что мне с ним делать? Мы же вроде по уроку стандарт PSR-4 используем.

ivashkevich 03.09.2019 в 18:56

Если напрямую не используются в дочерних, то всегда private.
Можно посетить как psr-0, чтобы штормик отстал.

Dreft 04.09.2019 в 20:50
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }

    public function setPrice(float $price)
    {
        $this->price = $price;
    }
}

$test = new PaidLesson('Урок о наследовании в PHP','Лол, кек, чебурек','Ложитесь спать, утро вечера мудренее','99.90');

var_dump($test);
ivashkevich 04.09.2019 в 21:26

Отлично

XXX 23.09.2019 в 14:24
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice($price): void
    {
        $this->price = $price;
    }

    public function getPrice()
    {
        return $this->price;
    }
}

$paidLesson1 = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($paidLesson1);
ivashkevich 23.09.2019 в 14:26

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

prinzplanloser0514@gmail.com 29.09.2019 в 19:16
<?php

class Post
{
    protected $title;
    protected $text;
    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }
    public function getTitle()
    {
        return $this->title;
    }
    public function setTitle($title): void
    {
        $this->title = $title;
    }
    public function getText()
    {
        return $this->text;
    }
    public function setText($text): void
    {
        $this->text = $text;
    }
}
class Lesson extends Post
{
    protected $homework;
    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }
    public function getHomework(): string
    {
        return $this->homework;
    }
    /**
     * @param string $homework
     */
    public function setHomework(string $homework): void
    {
        $this->homework = $homework;
    }
}
class Paidlesson extends Lesson
{
    protected $price;
    function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }
    function setPrice(float $price)
    {
        $this->price = $price;
    }
    function getPrice(): string
    {
        return $this->price;
    }
}
?>

Вообще для денег не подходит флоат,но я пока не знаю,чем его заменить)

ivashkevich 30.09.2019 в 00:37

Почему все свойства protected? В дочерних классах ни одно из них не используется.

prinzplanloser0514@gmail.com 30.09.2019 в 08:53

Ну,допустим мы не хотим изменения их напрямую,но в будущем мы может будем их использовать в дочерних классах,почему не поставить протектед?

ivashkevich 01.10.2019 в 12:28

Вот когда надо будет, тогда и сделаешь. А по умолчанию всегда ставь private. Иначе непонятно будет, используется ли свойство только в этом классе или где-то ещё.

dliashchenko 08.10.2019 в 14:01
class PaidLesson extends Lesson
{
    private $price;
    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }
    public function getPrice()
    {
        return $this->price;
    }
    public function setPrice($price)
    {
        $this->price = $price;
    }
    public function sayThisText()
    {
        echo 'Заголовок: ' . $this->getTitle() . '<br/>Текст: ' . $this->getText() . '<br/>Домашка: '
            . $this->getHomework() . '<br/>Цена: ' . $this->price;
    }
}

$paidLesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек',
    'Ложитесь спать, утро вечера мудренее', '99.90');
$paidLesson->sayThisText();
var_dump($paidLesson);
ivashkevich 08.10.2019 в 17:21

Супер!

AleksandrNenashev 09.10.2019 в 23:35

ничего не понял и ничего не получилось(

<?php

class Lesson extends PaidLesson
{
    private $title;
    private $text;
    private $price;

    public function __construct(string $title, string $text, string $price)
    {
        $this->title = $title;
        $this->text = $text;
        $this->price = $price;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getText()
    {
        return $this->text;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }

    public function getPrice()
    {
        return $this->price;
    }

    public function setPrice($price): void
    {
        $this->price = $price;
    }
}

$Lesson = new PaidLesson('Урок о наследовании в PHP', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', 99.90);
var_dump($lesson);
ivashkevich 10.10.2019 в 07:48

Зачем здесь повторяются свойства из Lesson? Где типы аргументов? Начинай с курса PHP для начинающих.

Evilinside 11.10.2019 в 15:02
<?php

class Post
{
    protected $title;
    protected $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function setTitle($title): void
    {
        $this->title = $title;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setText($text): void
    {
        $this->text = $text;
    }

    public function getText()
    {
        return $this->text;
    }
}

class Lesson extends Post
{
    private $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

    public function setHomework($homework): void
    {
        $this->homework = $homework;
    }

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

}

class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice( float $price): void
    {
        $this->price = $price;
    }
    public function getPrice()
    {
        return $this->price;
    }
}

$paidLesson_1 = new PaidLesson('Заголовок','Текст','Домашка', 99.90);

var_dump($paidLesson_1);
ivashkevich 11.10.2019 в 21:16
    protected $title;
    protected $text;

Почему protected а не private?

public function setTitle($title)

Почему в конструкторе есть тип аргумента, а здесь нет?

$paidLesson_1

Имена переменных пишутся в camelCase. Не должно быть никаких подчеркиваний.

Evilinside 14.10.2019 в 11:03

Принял, спасибо. Будем исправлять

Evilinside 14.10.2019 в 11:27

Исправил.

<?php

class Post
{
    private $title;
    private $text;

    public function __construct(string $title, string $text)
    {
        $this->title = $title;
        $this->text = $text;
    }

    public function setTitle(string $title): void
    {
        $this->title = $title;
    }

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

    public function setText( string $text): void
    {
        $this->text = $text;
    }

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

class Lesson extends Post
{
    private $homework;

    public function __construct(string $title, string $text, string $homework)
    {
        parent::__construct($title, $text);
        $this->homework = $homework;
    }

    public function setHomework(string $homework): void
    {
        $this->homework = $homework;
    }

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

}

class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function setPrice( float $price): void
    {
        $this->price = $price;
    }
    public function getPrice(): float
    {
        return $this->price;
    }
}

$paidLesson = new PaidLesson('Заголовок','Текст','Домашка', 99.90);

var_dump($paidLesson);
ivashkevich 14.10.2019 в 11:30

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

H3licoptero 25.10.2019 в 15:11
class PaidLesson extends Lesson
{
    private $price;

    public function __construct(string $title, string $text, string $homework, float
    $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price = $price;
    }

    public function getPrice(): float
    {
        return $this->price;
    }

    public function setPrice(float $price): void
    {
        $this->price = $price;
    }
}

$price = new PaidLesson('Урок наследования PHP', 'Бла-бла-бла', 'Кто рано встаёт, тот рано встаёт.', 99.90);
var_dump($price);
echo 'Стоимость обучения в евро: ' . $price->getPrice();
ivashkevich 25.10.2019 в 16:13

И почему цена то string, то float? Непорядок.

H3licoptero 25.10.2019 в 16:28

Упс...недоглядел. Исправил.

ivashkevich 25.10.2019 в 17:48

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

TheTigra 04.11.2019 в 16:49

Домашка:
Еще насколько понимаю, в классе Lesson надо было поменять тип $homework с private на protected?

class PaidLesson extends Lesson {
    private $price;
    public function __construct(string $title, string $text, string $homework, float $price)
    {
        parent::__construct($title, $text, $homework);
        $this->price=$price;
    }
    public function getPrice(): float
    {
        return $this->price;
    }

    public function setPrice(string $homework): void
    {
        $this->price = $price;
    }
}
$lesson = new PaidLesson('Урок о наследовании в ООП', 'Лол, кек, чебурек', 'Ложитесь спать, утро вечера мудренее', '99.90');
var_dump($lesson);
ivashkevich 04.11.2019 в 19:46

Нет. Модификатор доступа private правильный. Мы ведь в дочерних классах не используем это свойство.

Почему цена float, а в конструктор передаёте строку '99.90'?

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