Q:

Using $this when not in object context in

Не понимаю, почему не работает.
Вот что пишет, при попытке запроса

Using $this when not in object context in

Вот сам запрос
$sql = "SELECT count(*) FROM `users`";
$query = db::select($sql, 'num');

Если кто объяснит - буду рад.
 class db{
    public $db = NULL;

    public function __construct(){
        if($this->db == NULL){
            $this->db = new PDO("mysql:host=localhost;dbname=saki", 'root', '');
        }
        else
            return $this->db;
    }
    public function __destruct(){
        $this->db = null;
    }

    public function query($sql){
        return $query = $this->db->query($sql);
    }

    public function select($sql, $type){
        $query = $this->db->query($sql);

        if($type == 'assoc')
            return $query->fetch(PDO::FETCH_ASSOC);

        elseif($type == 'obj')
            return $query->fetch(PDO::FETCH_OBJ);

        elseif($type == 'num')
            return $query->fetch(PDO::FETCH_BOTH);

    }
    public function insert($sql, $arr){
        $add = $this->db->prepare($query);
        $add->execute($arr);
    }
}

UPD: Забыл добавить, ошибка указывает на строку 29, в которой:
$query = $this->db->query($sql);

A:

Вместо этого класса пишешь
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$pdo = new PDO("mysql:host=localhost;dbname=saki", 'root', '', $opt);

function pdo($sql, $data=[]) 
{
    global $pdo;
    $stmt = $pdo->prepare($sql);
    $stmt->execute($data);
    return $stmt;
}

Пока не изучишь ООП, этого будет более чем достаточно для выполнения любых запросов, эта функция заменит тебе и метод insert(), и select(), и все какие ты еще только собираешься написать. Причём для запросов SELECT можно будет получить любое количество строк, а не одну, как у тебя.
Не говоря уже о том, что твой код сократится с трех строчек до одной:
$num = pdo("SELECT count(*) FROM `users`")->fetchColumn();

ЗЫ. PDO умеет гораздо больше, чем ты думаешь. И перед тем, как писать свой враппер на его основе, его надо хорошенько изучить. Тогда окажется, что писать-то особо и нечего.
Если всё же хочешь статическую запускалку для PDO, то вот готовая, http://phpfaq.ru/pdo_wrapper
Обрати внимание, что в таком классе обязателно должен быть либо на 100% продублирован функционал PDO, либо должен быть обеспечен доступ к объекту $pdo. Чтобы потом не спрашивать, как узнать last insert id или начать транзакцию.

