Не совсем правильно изначально спроектировал проект(сайт) и столкнулся с проблемой БД.
Скелет такой
//app.lib.php
class app{
function init(){
$this->db = new db();
}
}
//db.lib.php
class db{
function __construct(){
$this->mysqli = new mysqli();
}
function query($sql){
return $this->mysqli->query($sql);
}
}
//class1.lib.php
class class1{
function __construct(){
global $app;
$app->db->query("select ...");
}
}
//class2.lib.php
class class2{
function __construct(){
global $app;
$app->db->query("select ...");
}
}
//index.php
global $app;
//instance 1
$app = new app();
$app->init();
new class1();
new class2();
Все хорошо было, когда создаешь 1 экземпляр приложения(new $app), но мне понадобилось создавать много этих экземпляров для websocket'ов. Одно сообщение(onMessage) - 1 экземпляр приложения app(). Это нужно для создания нового коннекта с БД. Но функции внутрях классов дергают глобальный объект $app который постоянно меняется в коде
Делаю через pthread
//websocket.lib.php
class websocket{
public function onMessage($conn, $msg) {
$mess = new Message();
$mess->start();
}
}
namespace messages;
class Message extends \Thread {
public function __construct($opt = []){
$app = new \app();
$app->init();
}
public function run(){
new class1();
}
}
Получается $app->db->mysqli будет постоянно меняться внутрях