dongtang5229
dongtang5229
2016-08-05 03:02

Parent的类构造函数调用错误?

已采纳

I'm trying to call parent class constructor but it throws an error

Fatal error: Cannot call constructor

and the same code was working well before, I didn't change anything and but suddenly don't know what could have happened, It is throwing this error.

I've read some answers on stackoverflow, but they say that your parent class doesn't contain a constructor, well, this is not my case I have constructor in my parent class. Here's my code:

class DB
{
    var $con;

    public function __construct()
    {
        require_once 'configs/dbconfig.php';
        $this->connect();
    }

    function connect()
    {
        try{
            $this->con = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASS);
            $this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        }catch(PDOException $ex) {
            echo $ex->getMessage();
        }
    }
}

and then I have a class Posts which is extending DB and calling DB's constructor.

class Posts extends DB
{
    var $user_id;

    public function __construct($user_id)
    {
        parent::__construct();
        $this->user_id = $user_id;
    }

    function get_posts($search,$pages,$since_id=0,$max_id=false,$count=20,$status='active')
    {
        $extra = '';
        if($search) $extra .= " AND text LIKE CONCAT('%',:search,'%')";
        if(!empty($pages)) $extra .= " AND page IN('".implode("','", $pages)."')";
        if(!empty($status) && $status != 'all') $extra .= " AND status=:status";

        $max_id = ($max_id) ? $max_id : time();

        $sqlCommand = "SELECT id,pid,text,media,media_url,type,name,u_id,username,user_profile_url,user_photo_url,post_url,date,status,source,page_id FROM ".POSTS." WHERE date>=:since_id AND date<=:max_id".$extra." AND user_id=:user_id ORDER BY date DESC LIMIT $count";
        $params = array(':since_id'=>$since_id,':max_id'=>$max_id,':user_id'=>$this->user_id);
        if($search) $params[':search'] = $search;
        if($status && $status != 'all') $params[':status'] = $status;

        $posts = $this->fetch($sqlCommand,$params);
        return $posts;
    }
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • dongshenchi5364 dongshenchi5364 5年前

    This is with your php version, It must have been changed, please check the version of php and try to update that.

    点赞 评论 复制链接分享
  • dtbi27903 dtbi27903 5年前

    I think this is a known PHP bug (look here), try to make a function in DB that returns a new DB (by calling constructor) and in Posts call this function that you created.

    点赞 评论 复制链接分享
  • dtm41506 dtm41506 5年前

    Well maybe it's a basic silly answer, but did you try 'require'?

    点赞 评论 复制链接分享