Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $this不在对象中时';语境_Php_Mysql_Database - Fatal编程技术网

Php $this不在对象中时';语境

Php $this不在对象中时';语境,php,mysql,database,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(); $page

我得到以下错误:

致命错误:在中不在对象上下文中时使用$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;
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->\u db
应该包含
db class
的实例。那么,为什么在使用
$this->\u db
调用db class的方法时会出现错误

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);
        }
}

您使用的是没有引用实例的
静态
函数。 尝试改用
self::

self::$_db

$this
在静态方法中不可用。静态方法没有任何与之关联的对象,因此静态方法中没有可用的
$this
引用。因此,您可以声明一个静态
属性
,并在
静态
函数中使用它。现在,您调用的
DB
实例应该是静态的
属性
,这样您就可以在静态函数中访问它了

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);

希望有帮助。

我不明白!fetchAllPost()不是一个静态函数。那么我为什么要使用它呢?不,但您正在静态函数中调用它。尝试了它不起作用:($this->\u db有db类实例。我已经在pagination.php类中使用print\r($this->\u db)对它进行了测试;所以您更改了
$pointerDB=$this->\u db->fetchAllPost($table,$val)
$pointerDB=self:$\u db->fetchAllPost($table,$val);
您得到了相同的错误?让我们来看看。您为什么要创建一个
实例来调用
静态
函数。您可以通过
分页::getAllContent('userpost',$data->user\u id)调用
分页
静态函数
以防我决定在分页类中放入任何公共函数。它尚未完成:)很高兴我能提供帮助:)