当不在对象的上下文中时$ this

时间:2015-12-30 05:14:22

标签: php mysql database

我收到以下错误:

  

致命错误:在不在对象上下文中时使用$ this   第20行的C:\ xampp \ htdocs \ practice \ classes \ pagination.php

我的工作流程如下:

从pagination2.php页面我初始化了所有类实例:

  require_once '../core/init.php';


  $pagination=new Pagination();
  $user=new User();
  $data=$user->data();

  $pagenum=$pagination::getAllContent('userpost',$data->user_id);
  echo $pagenum;

pagination.php页面包含分页类

class Pagination{
    private $_db;
    public function __construct(){
       $this->_db=DB::getInstance();
       print_r($this->_db);
    }

    public static function getUserContentOffset($table,$offset,$id){
        $val=array();
        $val[]=$id;
        $pointerDB=$this->_db->fetchPostByOffset($table,$offset,$val);
        return $pointerDB->results();
    }
    public static function getAllContent($table,$id){
        $val=array();
        $val[]=$id;
        print_r($val);
        $pointerDB=$this->_db->fetchAllPost($table,$val); // error is here
        return $pointerDB->countit();

    }



    }

$this->_db应该包含DB class的实例。然后当我使用$this->_db

调用数据库类的方法时,为什么会出现错误

db.php中

class DB{

        private static $_instance=null;
    private $_pdo,$_query,$_error=false,$_results,$_count=0;
    public function __construct(){
        try{
           $this->_pdo=new PDO('mysql:host='.Config::get('mysql/host').';dbname='.Config::get('mysql/db'),Config::get('mysql/username'),Config::get('mysql/password'));

        }catch(PDOException $e){
           die($e->getMessage());
        }
    }
    public static function getInstance(){

       if(!isset(self::$_instance)){
          self::$_instance=new DB();
       }
       return self::$_instance;
    }

   public function fetchAllPost($table,$val=array()){
            $sql="SELECT title FROM ".$table." WHERE users_user_id = ?";
            return $this->query($sql,$val);
        }
}

2 个答案:

答案 0 :(得分:1)

$this在静态方法中不可用。静态方法没有任何与之关联的对象,因此静态方法中没有可用的$this引用。因此,您可以声明静态properties并在static函数中使用它。现在,您的调用DB实例应该是静态property,以便您可以在静态函数中访问它。

class Pagination{
     private static $_db;
     public function __construct(){
        self::$_db = DB::getInstance();
     }

    public static function getUserContentOffset($table,$offset,$id){
       $val=array();
       $val[]=$id;
       $pointerDB=self::$_db->fetchPostByOffset($table,$offset,$val);
       return $pointerDB->results();
    }
    public static function getAllContent($table,$id){
      $val=array();
      $val[]=$id;
      $pointerDB = self::$_db->fetchAllPost($table,$val); // error is here
      return $pointerDB->countit();
   }
}

现在你可以这样试试

$pagintation = new Pagination();
$pagenum = $pagination->getAllContent('userpost',$data->user_id);

希望它有所帮助。

答案 1 :(得分:-1)

您使用的static函数没有实例可供参考。 尝试使用self::代替。

self::$_db
相关问题