PHP ООП синглтон, как правильно использовать статические методы? Помогите разобраться. Делаю класс User. Как правильно организовать класс User и затем его использовать? Мне кажется, я что-то делаю не так.namespace model;
use \core\DB;
class User
{

protected static $_instance;
private $user_data;
public function __construct($user_id)
{
DB::$sql_query = "SELECT * FROM `table_users` where `id_usr` = '".$user_id."' ";
DB::sql_execute();
$this->user_data = DB::fetch_assoc();
}

public function getUser() {
return $this->user_data['name'];
}
Класс DB сделан в стиле синглтон инициализируется один раз core\DB::getInstance();
Вот дальше я начинаю путаться. Как правильно организовать класс User и затем его использовать? Сейчас в модели я делаю так, но мне кажется что это как-то не правильноfunction __construct() // конструктор в модели
{
$this->model = new \model\model_place();
$this->view = new \view\view_index();
$this->user = new User('1234');
}

function action_index()
{
$data = $this->model->get_data();
echo $this->user->getUser(); // для примера
$this->view->generate('view_index.php', 'html_page.htm', $data);
}
UPD: использовать синглтон в User ошибка, поправил.

21 Авг 2019 в 07:09
247 +1
0
Ответы
1

Для организации класса User и его использования вам следует сделать следующее:

Организуйте класс User таким образом, чтобы он был синглтоном и имел статический метод getInstance(), который будет создавать единственный объект класса User:
namespace model;

use \core\DB;

class User
{
protected static $_instance;
private $user_data;

private function __construct($user_id)
{
DB::$sql_query = "SELECT * FROM `table_users` where `id_usr` = '".$user_id."' ";
DB::sql_execute();
$this->user_data = DB::fetch_assoc();
}
public static function getInstance($user_id)
{
if (!isset(self::$_instance)) {
self::$_instance = new User($user_id);
}
return self::$_instance;
}
public function getUser() {
return $this->user_data['name'];
}

}

2. В вашем контроллере или другом месте, где вы хотите использовать класс User, получите экземпляр объекта класса User с помощью статического метода getInstance():
```php
$user = \model\User::getInstance('1234');
echo $user->getUser();

Таким образом, вы создаете и используете единственный объект класса User в вашем приложении, соблюдая принципы синглтона и ООП.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир