2017-02-23 143 views
2

一个成员函数查询()我是一个新手,OOP和尚在测试阶段,能有人指出哪里我的错误是什么? 我收到提示致命错误:未捕获的错误:调用上的空

Fatal error: Uncaught Error: Call to a member function query() on null on the following line:

我已经意识到,DB连接没有被从核心类继承,但我不知道为什么。

$user = $this->db->query("SELECT * FROM users WHERE id='".$user_id."' LIMIT 1"); 

class.php

class Core { 
     public $db; 
     public $domain; 
     public $settings; 
     public function getDomain() { 
      return $this->domain; 
     } 
     function __construct($db,$domain) { 
      $this->db = $db; 
      $this->domain = $domain; 
      $this->getSettings(); 
     } 
     public function getSettings() { 
      $settings = $this->db->query("SELECT * FROM settings"); 
      $settings = $settings->fetch_object(); 
      $this->settings = $settings; 
     } 
    } 

    class User extends Core { 
     public $user; 
     function __construct($user_id) { 
      $this->setUser($user_id); 
     } 
     public function setUser($user_id) { 
      $user = $this->db->query("SELECT * FROM users WHERE id='".$user_id."' LIMIT 1"); 
      if($user->num_rows >= 1) { 
       $user = $user->fetch_object(); 
       $this->user = $user; 
      } 
     } 

的index.php

$core = new Core($db,$domain); 
$user = new User($_SESSION['user_id']); 

澄清:

我的数据库变量从我的config.php文件通过我包括index.php页面的开始 的config.php

$_db['host'] = 'localhost'; 
$_db['user'] = 'root'; 
$_db['pass'] = 'root'; 
$_db['name'] = 'social'; 
$db = new mysqli($_db['host'], $_db['user'], $_db['pass'], $_db['name']) or die('MySQL Error'); 
+0

什么时候开始的会议?该会话数组是否包含一个值? –

+0

是的,会议已经开始。我认为这是事做不被继承了$ DB变量或东西 –

+0

一个正在进行几件事情。您可以在写入$ core = new Core($ db,$ domain)之前展示如何设置变量$ db? – Yolo

回答

1

现在的问题就在于你调用类的方式中。 Core类__construct()函数需要$ db连接。现在,User类将不得不调用Core类的构造函数来启动数据库连接。所以,你有一个选择至少:

呼叫只有用户类是这样的:

$user = new User($db,$domain,$_SESSION['user_id']); 

而改变你的用户构造函数来做到这一点:

function __construct($db,$domain,$user_id) { 
    parent::__construct($db,$domain); 
    $this->setUser($user_id); 
} 

如果你的数据库连接变量都是正确(主机/用户名/密码/端口),它应该工作。

1

如果构建一个子类,父类的子类的方法如果方法是直接

class Core { 
    public $db; 
    public $domain; 
    public $settings; 
    public function getDomain() { 
     return $this->domain; 
    } 
    function __construct($db,$domain) { 
     $this->db = $db; 
     $this->domain = $domain; 
     $this->getSettings(); 
    } 
    public function getSettings() { 
     $settings = $this->db->query("SELECT * FROM settings"); 
     $settings = $settings->fetch_object(); 
     $this->settings = $settings; 
    } 
} 

class User extends Core { 
    public $user; 
    function __construct($user_id,$db,$domain) { 
     parent::__construct($db,$domain); 
     $this->setUser($user_id); 
    } 
    public function setUser($user_id) { 
     $user = $this->db->query("SELECT * FROM users WHERE id='".$user_id."' LIMIT 1"); 
     if($user->num_rows >= 1) { 
      $user = $user->fetch_object(); 
      $this->user = $user; 
     } 
    } 

称为不被使用和的index.php只是$user = new User($_SESSION['user_id'],$db,$domain);

0

没有设置继承后父类的构造。

例如

class Core { 
     public $db; 
     public $domain; 
     public $settings; 
     public function getDomain() { 
      return $this->domain; 
     } 
     function __construct($db,$domain) { 
      $this->db = $db; 
      $this->domain = $domain; 
      $this->getSettings(); 
     } 
     public function getSettings() { 
      $settings = $this->db->query("SELECT * FROM settings"); 
      $settings = $settings->fetch_object(); 
      $this->settings = $settings; 
     } 
} 

class User extends Core 
{ 
    public $user; 

    // parent:param Parameters add 
    function __construct($user_id,$db,$domain) { 
     // parent constructer call 
     parent::__construct($db,$domain); 
     $this->setUser($user_id); 
    } 
    public function setUser($user_id) { 
     $user = $this->db->query("SELECT * FROM users WHERE id='".$user_id."' LIMIT 1"); 
     if($user->num_rows >= 1) { 
      $user = $user->fetch_object(); 
      $this->user = $user; 
     } 
    } 
} 


$user = new User($_SESSION['user_id'],$db,$domain); 

这是不好吗? http://php.net/manual/en/language.oop5.decon.php

相关问题