不在对象中时使用$this';s上下文错误


using $this when not in object's context error

这里有一个名为DB的类,用于准备一个pdo语句,然后对pdo对象执行selectinsert等。在这里,我试图insert从html表单中收集的一些数据。但当我执行代码时,它会给我在问题中提到的错误。getInstance()insert()都是公共静态函数。有人能帮我解决这个问题吗?

class DB{
        private static $_instance=null;
        private $pdo,
                $query,
                $error=false,
                $results,
                $count=0;
        private function __construct(){
                try{
                    $this->pdo=new PDO('mysql:host='.Config::get('mysql/host').';dbname='.Config::get('mysql/db'),Config::get('mysql/user'),Config::get('mysql/password'));

                }catch(PDOException  $e){
                    echo $e->getMessage();
                }
        }
        public static function getInstance(){
            if(!isset(self::$_instance)){
                  self::$_instance=new DB();
            }
            return self::$_instance;
        }
        private function bind($val){
               $i=1;
               foreach($val as $data){
                   $this->query->bindValue($i,$data);
               }
               $i++;
        }
        public static function insert(){
            $stmt='INSERT INTO users (username,password,name) VALUES (?,?,?)';
            if($this->query=$this->pdo->prepare($stmt)){
                $val=Validate::send();
                $this->bind($val);
                if($this->query->execute()){
                   return 'successfull';
                }
            }
        }
    } 

我调用了它们,比如:

if(isset($_POST['submit'])){
        $insert=DB::getInstance();
        $insert::insert();
    }   

您在静态函数中使用$this。这就是你出错的原因。

删除"insert()"前面的"static",然后调用$insert->insert();