PHP/MySQL | Создание экземпляра модели в конструкторе до испол

DELETED
Автор
6 октября 2019, в 12:40
Delete
Как Вы создаёте экземпляр модели?
Сразу в конструкторе и он всегда создан, даже если не активен экшен, где нужны методы модели?
Или именно при активации экшена, то есть экземпляр создаётся по месту использования?
Меня смущает то, что в коде тупо будет много раз прописано создание объекта (хотя это не смертельно), а если создавать в конструкторе, то смущает: не будет ли выделяться лишняя память для хранения созданного в нём экземпляра, который может быть не нужен на данный момент.
use App\Models\User;
class UserController
{
public function profileAction($id)
{
$user = User::getById($id);
// ...
}
}
class UserController
{
public function profileAction($id)
{
$user = User::getById($id);
// ...
}
}
Но для получения записей надо использовать репозитории.
Function (04.11.2019 в 06:49)
Но для получения записей надо использовать репозитории.
Но для получения записей надо использовать репозитории.
где такое "надо" написано?
Щас бы из за пары килобайт памяти переживать
Вероломство, тоже думал об этом и по стандарту объявляю модель в конструкторе контроллера
памяти будет жрать достаточно, поэтому лучше создать при вызове. Но я бы не использовал интерфейсы, достаточно подгрузки трейтов или еще хардкорней инклюд из функции создания нужного файла
________
посл. ред. 04.11.2019 в 10:27; всего 1 раз(а); by Сибирский
________
посл. ред. 04.11.2019 в 10:27; всего 1 раз(а); by Сибирский

DELETED
Автор
4 ноября 2019, в 20:08
Delete
SparkuS (04.11.2019 в 08:26)
Вероломство, тоже думал об этом и по стандарту объявляю модель в конструкторе контроллера
Вероломство, тоже думал об этом и по стандарту объявляю модель в конструкторе контроллера
где такой стандарт?

DELETED
Автор
4 ноября 2019, в 20:09
Delete
Сибирский (04.11.2019 в 10:26)
памяти будет жрать достаточно, поэтому лучше создать при вызове. Но я бы не использовал интерфейсы, достаточно подгрузки трейтов или еще хардкорней инклюд из функции создания нужного файла
памяти будет жрать достаточно, поэтому лучше создать при вызове. Но я бы не использовал интерфейсы, достаточно подгрузки трейтов или еще хардкорней инклюд из функции создания нужного файла
зачем тут экземпляр создавать, если запрос ещё не отправлен, я вот так делаю: сохдаю объект после POST запроса
namespace app\controllers;
use app\models\Main;
class MainController extends AppController
{
public function indexAction()
{
if (filter_has_var(0, 'go')) {
$login = filter_input(0, 'login');
$password = filter_input(0, 'password');
$mObj = new Main();
if ($mObj->loginHandler($login, $password) === true) {
$this->alertRedirect('success', $mObj->alert, '/menu');
}
$this->alertRedirect('danger', $mObj->alert);
}
$this->setSite('Военная экономическая стратегия');
$site = $this->site;
$this->set(compact('site'));
}
public function signupAction()
{
if (filter_has_var(0, 'go')) {
$login = preg_replace('/\s+/', ' ', trim(filter_input(0, 'login')));
$password = filter_input(0, 'password');
$email = filter_input(0, 'email', 517);
$mObj = new Main();
if ($mObj->signupHandler($login, $password, $email) === true) {
$this->sendMail($email, 'Логин: ' . $login . "\n" . 'Пароль: ' . $password);
$this->alertRedirect('success', $mObj->alert, '/training');
}
$this->alertRedirect('danger', $mObj->alert);
}
$this->setSite('Регистрация');
$site = $this->site;
$this->set(compact('site'));
}
public function forgotAction()
{
if (filter_has_var(0, 'go')) {
$password = $this->generateRandomString(10);
$email = filter_input(0, 'email', 517);
$mObj = new Main();
if ($mObj->forgotHandler($password, $email) === true) {
$this->sendMail($email, 'Новой пароль: ' . $password);
$this->alertRedirect('success', $mObj->alert, '/');
}
$this->alertRedirect('danger', $mObj->alert);
}
$this->setSite('Восстановление пароля');
$site = $this->site;
$this->set(compact('site'));
}
}
Вероломство, а ты и не создавай :) Тяни из статического класса :)