У меня есть пользовательский класс, который имеет имя пользователя, электронную почту и уровень пользователя, и у него есть такие методы, как ChangePassword, ChangeEmail, ChangeUserLevel, DeleteUser и Adduser.
В настоящее время класс выполняет все, что ему нужно, на основе данных, размещенных на странице, которая имеет $user = new User(name,email,secure_level)
, Так, например, если вы отправили форму смены пароля на страницу с экземпляром пользовательского объекта в __construct, у него есть несколько if statments ->, таких как:
If ($_POST['changePassword']) {
$this -> changePassword(); }
и продолжается так же для других методов класса. Итак, мой вопрос:
Это хороший способ обработки этих событий или было бы лучше сделать что-то вроде:
$user = new User(name,email,secure_level);
if ($_POST['changePassword']) {
$user->changePassword(); }
Под лучшими я имею в виду производительность и возможные будущие подводные камни.
(У меня есть класс Login, класс Registration и класс веб-страницы, которые созданы аналогичным образом)
Заранее спасибо — я только начал изучать PHP, поэтому я не уверен ни в чем, что я делаю.
Да, второй вариант лучше. User
является классом Model (абстракция бизнес-логики) и поэтому не должен взаимодействовать с веб-запросами ($_POST
и друзья) напрямую, это задача для контроллера, а не для моделей.
Представьте себе, что в какой-то момент вам придется написать сценарий командной строки, который управляет пользователями. Если вы продолжаете User
Чистый интерфейс веб-логики, вы можете использовать его в этом скрипте и просто поменять контроллер (заменить $_POST[xxx]
с $argv
или похожие).
Есть миллион способов сделать это. Я лично использую одну функцию в своем пользовательском классе:
updateUser($username = null, $password = null, $email = null)
И тогда любое поле, которое не является нулевым, будет обновлено.