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


SlipKnot

Домашка:

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

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

Galay
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

Отлично!

Invo

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

Ilon
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

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

Ilon

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

ivashkevich

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

Ilon

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

ivashkevich

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

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

Отлично!

DmitryGavrilov
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

Отлично!

ArtemijeKA
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

Всё супер!

Benya
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

Отлично!

SBTesla
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

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

AxLT

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

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

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

AntonM99
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

Отлично!

zebra

Домашка:)

 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

Отлично!

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

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

demyanovpaul@yandex.ru

Создайте ещё один класс, являющийся наследником класса 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

Отлично!

Moskva
    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

Отлично!

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

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

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

lig7771991@list.ru
<?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

Супер!

Waldemar
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

Супер!

Waldemar

Решил в ОпенСервере сменить 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

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

lordbear53@gmail.com

Спасибо за урок!
У меня есть вопрос: "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

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

lordbear53@gmail.com

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

ivashkevich

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

lordbear53@gmail.com

Исправил

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

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

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

Супер!

alepawka
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

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

landialog
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

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

Bogdan

Объявите в нем свойство 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

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

Pavel-Tonk

У меня у одного ошибка при выполнении метода класса 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

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

ivashkevich

ОК)

Bugaga159
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

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

Bugaga159

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

excent63

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

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

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

excent63

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

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

Ок!

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

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

Evgeny

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

Отлично!

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

Отлично

85bogdan45

Если при выполнении домашки в классе 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

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

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

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

arhipow@mail.ru

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

ivashkevich

Верно =)

Grewi
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

Отлично

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

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

Boodoo
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);
polvanovv
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

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

Dram

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

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

Отлично!

artemship
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

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

Tina

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

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
public function getPrice()

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

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

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

Tina

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

ivashkevich

Отлично

ashfedor
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
public function getPrice()

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

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

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

ashfedor

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

ivashkevich

Отлично

Bocha

Артем, спасибо за урок!
Есть вопрос:
В классе 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

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

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

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

Moskva
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

Отлично

Bizzzon
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

Отлично.

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

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

Metey
<?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
    protected $title;
    protected $text;

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

public function getTitle()

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

public $price;

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

$PLesson

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

webdev

ДЗ

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

Супер

Reechniy
<?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
    protected $title;
    protected $text;
    protected $homework;

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

ivashkevich

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

Blook
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

Супер!!!

gruimed
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

Отлично

prognoz

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

ivashkevich

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

khuurak
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

Отлично

Pro100Bah
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
    protected $title;
    protected $text;

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

Pro100Bah
    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

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

Dreft
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

Отлично

XXX
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

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

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

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

prinzplanloser0514@gmail.com

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

ivashkevich

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

dliashchenko
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

Супер!

AleksandrNenashev

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

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

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

Evilinside
<?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
    protected $title;
    protected $text;

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

public function setTitle($title)

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

$paidLesson_1

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

Evilinside

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

Evilinside

Исправил.

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

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

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