За последние 24 часа нас посетили 21853 программиста и 1009 роботов. Сейчас ищут 646 программистов ...

Заполнить массив именем свойства, если оно изменено

Тема в разделе "PHP для новичков", создана пользователем Вероломство, 15 мар 2020.

  1. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    Вводная
    PHP:
    1. abstract class Model
    2. {
    3.     public $save = [];
    4.  
    5.     abstract protected static function table();
    6.  
    7.     public function __set($name, $value)
    8.     {
    9.         if (isset($this->{$name})) { // в этом условии наблюдается косяк
    10.             $this->save[] = $name;
    11.         }
    12.         $this->{$name} = $value;
    13.     }
    14.  
    15.     public function __get($name)
    16.     {
    17.         return $this->{$name} ?? null;
    18.     }
    19.  
    20.     public function __isset($name)
    21.     {
    22.         return isset($this->{$name});
    23.     }
    24.  
    25.     public function __unset($name)
    26.     {
    27.         unset($this->{$name});
    28.     }
    29. }
    Теперь изменяем
    PHP:
    1. class Course extends Model
    2. {
    3.     protected static function table()
    4.     {
    5.         return 'course';
    6.     }
    7.  
    8.     public static function courseHandler($user)
    9.     {
    10.         if (in_array($user->course_id, [1, 2, 3, 5, 6, 7])) {
    11.             $user->course_id++;
    12.             $user->baks += 100;
    13.             $user->hp -= 15;
    14.             $user->hp_up = time();
    15.             $user->exp += 5;
    16.             $user->hit--;
    17.             $user->hit_up = time();
    18.             var_dump($user->save);die(); // EMPTY
    19.             $user->save();
    20.             return;
    21.         }
    22.     }
    23. }
    Не могу понять, почему не заполняется массив?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    А где пример вызова класса? Что такое user ?
     
  3. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    если присмотреться, то объект приходит параметром, удивительно, правда? :)

    и никакого значения не имеет, просто дано, как пример
     
  4. Энтрикод

    Энтрикод Новичок

    С нами с:
    16 мар 2020
    Сообщения:
    1
    Симпатии:
    0
    Вас спрашивают о том, что без телепатии никто не в состоянии определить, что делает метод save обьекта user и с какого перепугу должно заполнятся наследуемое свойство save класса course к которому и нужно по идее обращаться.
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Так я про то и спрашиваю, где мы можем видеть, какой объект или класс вы туда передаёте? А если он не имеет значения, то можете делать с ним что угодно и вызывать любые несуществующие у ничего методы и свойства....толку не будет
     
  6. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    Вы код читать умете?
    Код (Text):
    1. public function __set($name, $value)
    2.     {
    3.         if (isset($this->{$name})) { // в этом условии наблюдается косяк
    4.             $this->save[] = $name;
    5.         }
    6.         $this->{$name} = $value;
    7.     }
    не заполняется массив save

    или я по Вашему ерундой страдаю, передаю пустого юзера НЕ вижу его результаты и теперь изменяю ИХ, чтобы заполнинлся массив

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

    Предупреждение за мат
     
    #6 Вероломство, 16 мар 2020
    Последнее редактирование модератором: 16 мар 2020
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    а вы по человечески понимаете ?
    Покажите код где вы вызываете класс это, где объекты эти создаете...

    а то что вы определили место где косяк - так это только ваше мнение. И если хотите чтоб разобрались в вашем коде и вам помогли - постарайтесь адекватно отвечать на поставленные вопросы
     
  8. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    ЭТОТ ВОПРОС БЫЛ ЗАДАН МНОЮ В РАЗДЕЛЕ - ДЛЯ ПРОФИ, какой дурак его переместил к гопникам?
     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    PHP:
    1. public static function courseHandler($user)
    2.     {
    3.    var_dump($user);  // что тут? где вы в коде вызываете и как определяете $user ?
     
  10. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    ЭТОТ ВОПРОС ДЛЯ ПРОФИ, ОН ТАМ БЫЛ ЗАДАН КТО ЕГО СЮДА ПЕРЕМЕСТИЛ Я НЕ ЗНАЮ, НЕ УМЕЕТЕ ЧИТАТЬ КОД - МИМО ПРОХОДИМ

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

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    скатертью дорога, на фига здесь неадекваты с завышенным самомнением
     
  12. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    этому вопросу даже в разделе для новичков не место, не то что "для профи"
    на лицо отсутствие элементарных базовых знаний, ну и воспитания