За последние 24 часа нас посетили 10160 программистов и 680 роботов. Сейчас ищет 381 программист ...

Кринжовый вопрос новичка про ооп. Не работает код

Тема в разделе "PHP для новичков", создана пользователем Dasderdas, 4 окт 2022.

Метки:
  1. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    60
    Симпатии:
    0
    Только, только начал пытаться понимать ооп, решил сразу на практике. Ниже попытки создать класс карточку, где у каждого её объекта будет своё имя, описание, картинка, цена.
    Так как я сделал ниже, не работает ошибка "Constant expression contains invalid operations" На строке с созданием переменной $cardlayout
    PHP:
    1. <?php
    2. class ShoppingCard {
    3.     public $cardname;
    4.     public $carddesc;
    5.     public $cardimag;
    6.     public $cardcost;
    7.     public $cardlayout = '
    8. <div class="card cardshop">
    9.  <img class="'.$cardimag.'">
    10.  <div class="card-body">
    11.    <h5 class="card-title">'.$cardname.'</h5>
    12.    <p class="carddesc">'.$carddesc.'</p>
    13.    <div class="mbend rubcard">'.$cardcost.' руб.</div>
    14.    <a '."href=\"$url/buy.php?buy=gsp\"".'class="btn button-card mbend btn-primary">Купить</a>
    15.  </div>
    16. </div>';
    17. }
    18. $gsp = new ShoppingCard();
    19. $gsp -> cardname = 'Атомный реактор';
    20. $gsp -> carddesc = 'Мощная штука';
    21. $gsp -> cardimag = 'img/ar.png';
    22. $gsp -> cardcost = '99';
    23. echo $gsp -> cardlayout;
    24. ?>
    Было бы здорово, если бы кто-то показал как код должен выглядеть. Вероятно он очень плох, тема ооп мне даётся очень тяжко
     
  2. don.bidon

    don.bidon Новичок

    С нами с:
    28 мар 2021
    Сообщения:
    445
    Симпатии:
    67
    Ошибку даже не пытался перевести? Ну и нельзя значение свойства объекта задавать через какие-то там к тому же неопределённые переменные ($cardimag и прочие).
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.511
    Симпатии:
    672
    Адрес:
    Татарстан
    обращение к свойствам объекта внутри класса через $this
    то есть
    PHP:
    1. public $cardlayout = '
    2. <div class="card cardshop">
    3. <img class="'.$this->cardimag.'">
    а вообще оформление и код смешивать - это и есть кринж,
     
  4. don.bidon

    don.bidon Новичок

    С нами с:
    28 мар 2021
    Сообщения:
    445
    Симпатии:
    67
    Да не работает так.
     
    Dasderdas нравится это.
  5. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.510
    Симпатии:
    340
    Ознакомьтесь: PHP: Свойства - Manual
     
    Dasderdas нравится это.
  6. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    60
    Симпатии:
    0
    Ну я просто хотел узнать, как такой пример моего кода должен выглядеть. Но судя по ответам, в моём коде неправильно всё.
    Так что ладно, закроем тему
     
  7. antoniii

    antoniii Новичок

    С нами с:
    16 мар 2022
    Сообщения:
    286
    Симпатии:
    60
    Твоя ошибка в том что $this можно использовать только внутри метода.
    PHP:
    1. <?php
    2. class ShoppingCard {
    3.     public $cardname;
    4.     public $carddesc;
    5.     public $cardimag;
    6.     public $cardcost;
    7.     public $cardlayout;
    8.     function __construct(){
    9.     $this->cardlayout = '
    10. <div class="card cardshop">
    11.  <img src class="'.$this->cardimag.'">
    12. <div class="card-body">
    13.   <h5 class="card-title">'.$this->cardname.'</h5>
    14.   <p class="carddesc">'.$this->carddesc.'</p>
    15.   <div class="mbend rubcard">'.$this->cardcost.' руб.</div>
    16.   <a '."href=\"$url/buy.php?buy=gsp\"".'class="btn button-card mbend btn-primary">Купить</a>
    17. </div>
    18. </div>';
    19. }
    20. }
    21. $gsp = new ShoppingCard();
    22. $gsp -> cardname = 'Атомный реактор';
    23. $gsp -> carddesc = 'Мощная штука';
    24. $gsp -> cardimag = 'img/ar.png';
    25. $gsp -> cardcost = '99';
    26. echo $gsp -> cardlayout;
    27. ?>
     
    Dasderdas нравится это.
  8. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    60
    Симпатии:
    0
    Вот спасибо!
     
  9. antoniii

    antoniii Новичок

    С нами с:
    16 мар 2022
    Сообщения:
    286
    Симпатии:
    60
    Можно задавать значения свойств класса прямо в конструкторе:
    PHP:
    1. <?php
    2. class ShoppingCard {
    3.     public $cardname;
    4.     public $carddesc;
    5.     public $cardimag;
    6.     public $cardcost;
    7.     public $cardlayout;
    8.    function __construct($cardname,$carddesc,$cardimag,$cardcost){
    9.       $this->cardname = $cardname;
    10.       $this->carddesc = $carddesc;
    11.       $this->cardimag = $cardimag;
    12.       $this->cardcost = $cardcost;
    13. }
    14. public function output(){
    15.     $this->cardlayout = '
    16.    <div class="card cardshop">
    17.    <img src class="'.$this->cardimag.'">
    18.    <div class="card-body">
    19.    <h5 class="card-title">'.$this->cardname.'</h5>
    20.   <p class="carddesc">'.$this->carddesc.'</p>
    21.   <div class="mbend rubcard">'.$this->cardcost.' руб.</div>
    22.   <a '."href=\"$url/buy.php?buy=gsp\"".'class="btn button-card mbend btn-primary">Купить</a>
    23. </div>
    24. </div>';
    25.   echo $gsp -> cardlayout;
    26. }
    27. }
    28. $gsp = new ShoppingCard('Атомный реактор','Мощная штука','99');
    29. $gsp->output();
    30.  
    31. ?>
     
    Dasderdas и yanuzay нравится это.
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.454
    Симпатии:
    1.720
    Сейчас можно ещё круче
    PHP:
    1. class ShoppingCard {
    2.    public function __construct(public $cardname, public $carddesc, public $cardimag, public $cardcost) {}
    3.  
    4.    // .....
    5. }
     
    Dasderdas и yanuzay нравится это.
  11. antoniii

    antoniii Новичок

    С нами с:
    16 мар 2022
    Сообщения:
    286
    Симпатии:
    60
    Развитие PHP не стоит на месте. :)
     
    Dasderdas нравится это.
  12. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    60
    Симпатии:
    0
    А ещё вопрос, как можно каждый объект класса ShoppingCard, автоматически помещать в массив?
     
    #12 Dasderdas, 6 окт 2022
    Последнее редактирование: 6 окт 2022
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.454
    Симпатии:
    1.720
    Автоматически - никак. А так, как и любую другую переменную

    PHP:
    1. $a = [$app];
    2.  
    3. $b[] = $app;
     
    Dasderdas нравится это.
  14. antoniii

    antoniii Новичок

    С нами с:
    16 мар 2022
    Сообщения:
    286
    Симпатии:
    60
    @Dasderdas ну как успехи? Работает код?
     
    Dasderdas нравится это.
  15. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    60
    Симпатии:
    0
    Ясно, спасибо!
    --- Добавлено ---
    Работает, я бы не благодарил выше просто так. Не первый раз выручаешь :) Спасибо!