За последние 24 часа нас посетили 44977 программистов и 6346 роботов. Сейчас ищут 1863 программиста ...

Трейт с динамическими методами... Или все проще

Тема в разделе "PHP для новичков", создана пользователем LAMER83, 25 янв 2023.

  1. LAMER83

    LAMER83 Новичок

    С нами с:
    25 янв 2023
    Сообщения:
    3
    Симпатии:
    0
    Доброго времени суток, осваиваю PHP по учебнику и в конце очередной главы получил следующие задание:
    Создайте трейт Auth, который при наличии переменных класса $email и $password добавлял бы в класс метод auth(), принимающий в качестве аргумента электронный адрес и пароль. В случае успешного сопоставления метод должен помещать в сессию информацию о том, что пользователь аутентифицирован. Другой метод is_auth() при этом должен возвращать true или false в зависимости от того, пройдена аутентификация или нет. Если переменных $email и $password в классе нет, методы не должны появляться, даже если трейт Auth подмешан в класс.

    Вообще конечно какая-то дикость, мое начальное решение будет также вырви глаз, сильно не пинать.
    Пока вопрос только как реализовать: Если переменных $email и $password в классе нет, методы не должны появляться, даже если трейт Auth подмешан в класс
    Если есть идеи правильной реализации дайте направление ну или просто мысли вслух))

    PHP:
    1. <?php
    2. class Autof{
    3.     use Auth;
    4.     public $password = '';
    5.     public $email = '';
    6. }
    7. trait Auth
    8. {
    9.     public function __call(string $name, array $arguments)
    10.     {
    11.         if (property_exists('Autof', 'email') &&
    12.             (property_exists('Autof', 'password'))) {
    13.             if ($name == 'auth') {
    14.                 print_r($arguments);
    15.             }
    16.  
    17.         }
    18.  
    19.         if (property_exists('Autof', 'email') &&
    20.             (property_exists('Autof', 'password'))) {
    21.             if ($name == 'is_auth') {
    22.                 print_r($arguments);
    23.             }
    24.         }
    25.     }
    26. }
    27.  
    28. $temp = new Autof();
    29. $temp->is_auth('name', 'email');
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Задание дебильное. Но попробуй this использовать в property_exists
    --- Добавлено ---
    Подчинённого я бы побил, за такие фокусы в реальном проекте :)
     
  3. antoniii

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

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    @LAMER83 У тебя второй метод должен возвращать true или false. А у него нет ни объявления ни return
     
  4. LAMER83

    LAMER83 Новичок

    С нами с:
    25 янв 2023
    Сообщения:
    3
    Симпатии:
    0
    @antoniii Спасибо. Я вообще про саму суть задания "псевдо динамические методы в объекте".
    --- Добавлено ---
    @mkramer Использовать как $this->email. А если переменной в классе не будет. Вывалит или натайс или ошибку, не проверял, но предполагаю.