【问题标题】:OOP Class inheriting error [closed]OOP类继承错误[关闭]
【发布时间】:2013-08-05 07:06:00
【问题描述】:
<?php

// Forum Configuration
define('DB_HOST','localhost'); // Database Hostname
define('DB_USER','root'); // Database Username
define('DB_PASSWORD',''); // Database Password
define('DB_NAME','ultraforum'); // Database Name
define('WEB_NAME','Website Name'); // Website Name
define('WEB_TITLE','Website Title'); // Website Title


// Do not modify anything under this line :)

class db {

    var $dbhost;
    var $dbuser;
    var $dbpassword;
    var $dbname;
    var $query;

    function connect() {
        $this->db =
            new mysqli($this->dbhost, $this->dbuser, $this->dbpassword, $this->dbname);
    }

    function __construct() {
        $this->dbhost = DB_HOST;
        $this->dbuser = DB_USER;
        $this->dbpassword = DB_PASSWORD;
        $this->dbname = DB_NAME;
    }
}

我的论坛类扩展了数据库

class forum extends db{

    public function __construct() {
        parent::__construct();
    }

    function displayInfo () {
        $this->forumInfo =
        $getInfo = $db->db->query("SELECT * FROM threads");
        while($getI = $getInfo->fetch_object()) {
            return $getI->Title;
        }
    }
}

对于第二个类,我想从我的 mysqli 数据库中获取所有线程。我从头等舱扩展了它,因为我想要连接信息。这就是我实现类的方式:

 $ThreadInfo = new forum;
 $ThreadInfo->displayInfo();

但我明白了

注意:未定义的属性:第 42 行的 forum::$db
致命错误:在第 42 行调用非对象上的成员函数 query()

【问题讨论】:

  • 这个问题似乎是题外话,因为它是关于一个易于谷歌和修复通知和一个错字,之前已经被问过并回答过令人作呕的问题,不应该再提出另一个问题。
  • 附带说明:您为什么使用 PHP4 OOP?很多 OOP 都是关于封装的。然而,你的代码没有使用任何可见性修饰符,有效地暴露了你所有的类内部。请检查stackoverflow.com/questions/2206387

标签: php mysql oop object mysqli


【解决方案1】:

变量$db 未在您的函数中定义。将行更改为:

$this->db->query

【讨论】:

    【解决方案2】:

    不要从数据库类扩展你的类。

    这是你做错了。 以多种方式。

    将您的 $db 类的实例传递给论坛:

        class forum {
            private $db;
    
            public function __construct($db) { 
                $this->db = $db;
            } 
    
            function getInfo () {
            }
    
    
    
        }
    

    另外,你的 displayInfo() 函数的代码都是错误的。
    你需要学习基本的mysqli操作之前开始其他课程。

    【讨论】:

      【解决方案3】:

      首先,你的连接没有被实例化,你需要在你的db类中调用connect()

      function __construct() {
          $this->dbhost = DB_HOST;
          $this->dbuser = DB_USER;
          $this->dbpassword = DB_PASSWORD;
          $this->dbname = DB_NAME;
          $this->connect();
      }
      

      其次,您想在类的范围内访问 $db:

      $getInfo = $this->db->query("SELECT * FROM threads");
      

      【讨论】:

        【解决方案4】:

        没有什么叫做 $db - 你现在希望 $this 作为它的类的一部分,所以

         $getInfo = $this->db->query("SELECT * FROM threads");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-25
          • 2018-05-21
          相关资源
          最近更新 更多