Задать вопрос

Как использовать объект как поле класса в php?

Есть класс ответственный за соединение с базой и есть класс который реализует логику приложения. Если сделать так:
class MainLogik {
    private $db;
    __construct($data_base_object) {
        $db = $data_base_object;
    }
   
    // добавит в базу
    function addTo($param) { 
        $this->db->query(/* params*/); // error тут
    }
}

В даный момент решил задачу так: в каждую функцию передаю объект $db в параметре и уже в функции использую его. Но это скорее все не правильно.

Отсуда вопрос: какой стандарт для подобных ситуаций, как это сделать привильно?
  • Вопрос задан
  • 2882 просмотра
Подписаться 3 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
Folour
@Folour
-  $db = $data_base_object;
+  $this->db = $data_base_object;


Ошибка в конструкторе. Объект класса Базы Данных присваевается переменной $db вместо $this->db
Ответ написан
Комментировать
Сделать родиельский класс, в котором будут грузиться классы для БД, сессии итп в его свойства.

Затем, при создании новых классов екстендить родительский, например:
class MainLogic {
	protected $db;

	function __construct() {
		$this->db = new DB('login', 'pass', 'database'); // получаем инстанс, короче
	}

        function testDb() {
             $this->db->query('...'); // will work! 
       }

}

class User extends MainLogic {
	
	public function addUser() {
		$this->db->query(''); // also will work, тут уже это св-во есть, тк мы его пронаследовали от MainLogic
	}

}


P.S. Если класс с логикой только один (что, в большинстве случае, также не может быть правильно) - то просто в __constuct присваивайте $this->db ссылку на класс базы и из методов MainLogic обращайтесь через $this->db.
P.P.S. Не знаю, какой класс для работы с БД юзаете Вы, но для этих дел уже есть ActiveRecord, например.
Ответ написан
@kolesnevg
я делаю отдельный класс для работы с БД
class Database
{
    var $conn;

    public static function getConnection($dbName)
    {
//создаю соединение
        return $connection;
    }
}


и отдельную функцию которая позволяет получить доступ к экземпляру этого класса
function db($dbName="")
{
    static $dbIns = Array();
    if (isset($dbIns[$dbName])) {
        return $dbIns[$dbName];
    }

    $db = new Database($dbName);
    $dbIns[$dbName]=$db;

    return $db;
}


соответственно в любом месте я делаю
db("Имя базы")->sql("SELECT * FROM tblName);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы