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 ошибка, поправил.
Для организации класса 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 в вашем приложении, соблюдая принципы синглтона и ООП.
Для организации класса User и его использования вам следует сделать следующее:
Организуйте класс User таким образом, чтобы он был синглтоном и имел статический метод getInstance(), который будет создавать единственный объект класса User:namespace model;
use \core\DB;
class User
private function __construct($user_id){
protected static $_instance;
private $user_data;
{
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 в вашем приложении, соблюдая принципы синглтона и ООП.