我收到以下错误:
致命错误:在不在对象上下文中时使用$ 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);
}
}
答案 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