Доброго времени суток, осваиваю PHP по учебнику и в конце очередной главы получил следующие задание: Создайте трейт Auth, который при наличии переменных класса $email и $password добавлял бы в класс метод auth(), принимающий в качестве аргумента электронный адрес и пароль. В случае успешного сопоставления метод должен помещать в сессию информацию о том, что пользователь аутентифицирован. Другой метод is_auth() при этом должен возвращать true или false в зависимости от того, пройдена аутентификация или нет. Если переменных $email и $password в классе нет, методы не должны появляться, даже если трейт Auth подмешан в класс. Вообще конечно какая-то дикость, мое начальное решение будет также вырви глаз, сильно не пинать. Пока вопрос только как реализовать: Если переменных $email и $password в классе нет, методы не должны появляться, даже если трейт Auth подмешан в класс Если есть идеи правильной реализации дайте направление ну или просто мысли вслух)) PHP: <?php class Autof{ use Auth; public $password = ''; public $email = ''; } trait Auth { public function __call(string $name, array $arguments) { if (property_exists('Autof', 'email') && (property_exists('Autof', 'password'))) { if ($name == 'auth') { print_r($arguments); } } if (property_exists('Autof', 'email') && (property_exists('Autof', 'password'))) { if ($name == 'is_auth') { print_r($arguments); } } } } $temp = new Autof(); $temp->is_auth('name', 'email');
Задание дебильное. Но попробуй this использовать в property_exists --- Добавлено --- Подчинённого я бы побил, за такие фокусы в реальном проекте
@antoniii Спасибо. Я вообще про саму суть задания "псевдо динамические методы в объекте". --- Добавлено --- @mkramer Использовать как $this->email. А если переменной в классе не будет. Вывалит или натайс или ошибку, не проверял, но предполагаю.