класс — PHP ООП — & gt; операторы if в __construct против вызывающих функций напрямую (перформанс и будущее)

У меня есть пользовательский класс, который имеет имя пользователя, электронную почту и уровень пользователя, и у него есть такие методы, как 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, поэтому я не уверен ни в чем, что я делаю.

1

Решение

Да, второй вариант лучше. User является классом Model (абстракция бизнес-логики) и поэтому не должен взаимодействовать с веб-запросами ($_POST и друзья) напрямую, это задача для контроллера, а не для моделей.

Представьте себе, что в какой-то момент вам придется написать сценарий командной строки, который управляет пользователями. Если вы продолжаете User Чистый интерфейс веб-логики, вы можете использовать его в этом скрипте и просто поменять контроллер (заменить $_POST[xxx] с $argv или похожие).

1

Другие решения

Есть миллион способов сделать это. Я лично использую одну функцию в своем пользовательском классе:

updateUser($username = null, $password = null, $email = null)

И тогда любое поле, которое не является нулевым, будет обновлено.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector