ООП в php — не понимаю объекты, неправильно передаю ссылки?
Здесь неправильно не то что всё, а даже больше.
Потому что ёще до того как вы взялись писать этот "класс", не выучив даже базовый ООП синтаксис, код вашей "функции" уже был очень плохой.

Я сейчас напишу минимально приемлемый вариант, но повторять его не надо. Потому что всё равно непонятно будет.
Надо забыть временно про классы и учить базовый синтаксис РНР. Просто потому что сначала надо выучить базовые понятия - работу с БД, обработку ошибок, разделение ответственности:
- работа с переменными в запросе ведётся через параметризованные запросы
- код класса не должно тошнить прямо на экран сообщениями об ошибках
- метод getArray не должен возвращать объект класса mysqli_result. он должен возвращать массив
- код, который будет в дальнейшем работать с результатом вызова метода getArray, не должен ничего знать про базу данных

Про сам же код ООП надо хотя бы один раз посмотреть  его в учебнике, а не писать на основе чистой фантазии.  
class CProducts
{
    private $link;
    public function __construct(mysqli $link) {
        $thi->link = $link;
    }
    public function getArray($lim) {
        $query = "SELECT * FROM products ORDER BY DATE_CREATE DESC LIMIT ?";
        $stmt = $this->link->prepare($query);
        $stmt->bind_param("s", $lim);
        $stmt->exeсute();
        $result = $stmt->get_result();
        return $result->fetch_all(MYSQLI_ASSOC);
    }
}
 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = new mysqli($host, $user, $pass, $dbname);
$db->set_charset('utf8mb4');
$db->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
  
$product = new CProducts($db);
$result = $product->getArray(3);
Ну так синтаксис классов изучите. Вы ж не правильно свойства объявляете.