Php $this不在对象中时';语境
我得到以下错误: 致命错误:在中不在对象上下文中时使用$this 第20行的C:\xampp\htdocs\practice\classes\pagination.php 我的工作流程如下: 从pagination2.php页面,我初始化了所有类实例: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
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)调用分页
静态函数
以防我决定在分页类中放入任何公共函数。它尚未完成:)很高兴我能提供帮助:)